初始化指针,c和c++编译器的区别(gcc-4.3.4)
Initializing pointers, difference between c and c++ compilers (gcc-4.3.4)
为了更好地理解指针,我写了下面的代码:
int *a = 17;
printf("%d", a+3);
在c下使用gcc-4.3.4编译得很好:http://ideone.com/abotd
但是它无法用c++编译:http://ideone.com/IdGHy
我想知道为什么。
同样,从第一个链接中可以看到,输出是29。我伪理解发生了什么:sizeof(int)是4,当我写一个+3而不是3加到17上时,3*4被加了。
不过,如果有人能更雄辩地解释一下,我会很感激的。
谢谢!
c++版本:
int *a = (int *)17;
printf("%d", a + 3);
是的,你的解释是正确的…
这被称为指针算术,并按您所说的方式工作。但是请注意,您在这里使用的代码中,您将一个常量值赋给指向int
的指针,在现实生活中很少这样做。指针值通常来自某种内存分配函数,例如C中的malloc
或c++中的new
(尽管new
不是函数)。
这不是正确的c++代码。
int * a = 17;
无效。不能隐式地将int
转换为指针。你可以 cast它,但如果我是你,我不会这样做。
你想要的是:
int foo = 17;
int* a = &foo;
printf("%dn", (*a) + 3);
你发布的代码试图将指针设置为17
的地址,这可能不是一个有效的地址,即使是,你也需要从int
转换为指针(int* a = (int*)17;
)。然后将其添加到该地址,并输出比它大3个int
大小的地址。我真的不认为这是你想要的。
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 奇怪的结构&GCC&clang(void*返回类型)
- GCC本机矩阵运算库
- GCC 中 __attribute__((未使用)) 和 __attribute((未使用)) 之间的区别
- GCC 警告和 gcc 错误消息之间的区别
- GCC 警告未使用的静态函数,但不警告静态内联:是否有实际区别?
- Windows的gcc端口中的thread_posixs和thread_win32有什么区别?
- GCC:-O3和-Os之间的区别
- Linux gcc和Windows Visual Studio处理静态常量的区别
- clang与gcc运行时的区别:用clang构建的c++类模板在没有复制构造函数的情况下崩溃,用复制构造函数构建的gcc
- 初始化指针,c和c++编译器的区别(gcc-4.3.4)
- GCC二进制字面值与c++ 14二进制字面值的区别
- c++11 STD数组- GCC与visual studio的区别
- 与gcc和g++的链接有什么区别吗?
- 编译器的区别:扩展x3::变体需要用gcc定义复制构造函数、复制赋值运算符和默认构造函数,但不需要clang
- solaris 10 gcc 4.8.2上的-lpthread和-phreads之间有什么区别
- g++和gcc之间有什么区别