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

Initializing pointers, difference between c and c++ compilers (gcc-4.3.4)

本文关键字:区别 gcc-4 编译器 指针 c++ 初始化      更新时间:2023-10-16

为了更好地理解指针,我写了下面的代码:

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大小的地址。我真的不认为这是你想要的。