c++ - 初始化指针,c 和 c++ 编译器之间的区别 (gcc-4.3.4)

标签 c++ c pointers gcc

为了更好地理解指针,我编写了这段代码:

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/

相关文章:

php - 如何确定一个列表是否是另一个列表的子集?

c - 函数的输出带有 float 指针参数,输入为 int 变量的地址

c - 输入第一个元素后出现段错误

c++ - 将结构复制(使用赋值)到 union 内的结构导致段错误

c++ - 将 QString 转换为 Local8bit,然后将 String 转换为 QString

java - 声明与其定义类型相同的结构变量

使用消息队列的 Java C 集成

c - 指向结构体的指针

c++ - 将静态库封装在动态链接库 (DLL) 中

c++ - 生成随机 boolean 值