为了更好地理解指针,我编写了这段代码:
int *a = 17;
printf("%d", a+3);
使用 gcc-4.3.4 在 c 下编译良好:http://ideone.com/abotd
但它无法用 C++ 编译:http://ideone.com/IdGHy
我想知道为什么。
此外,正如您从第一个链接中看到的那样,输出是 29。我伪理解发生了什么:sizeof(int) 是 4,当我写 a+3 而不是将 3 加到 17 时,3*4正在添加。
不过,如果有人能更 Eloquent 地解释一下,我将不胜感激。
谢谢!
最佳答案
对于 C++ 版本,试试这个:
int *a = (int *)17;
printf("%d", a + 3);
是的,你的解释是正确的......
这被称为指针运算,按照您所说的方式工作。但是请注意,您在此处使用的代码中,您将常量值分配给指向 int
的指针,这在现实生活中很少发生。指针值通常来自某种内存分配函数,例如 C 中的 malloc
或 C++ 中的 new
(尽管 new
不是函数) .
关于c++ - 初始化指针,c 和 c++ 编译器之间的区别 (gcc-4.3.4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8281796/