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

时间:2011-11-26 21:34:35

标签: c++ c pointers gcc

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

int *a = 17;

printf("%d", a+3);

使用gcc-4.3.4:http://ideone.com/abotd

在c下编译好了

然而它无法用c ++编译:http://ideone.com/IdGHy

我想知道原因。

另外,从第一个链接可以看到输出是29.我伪理解发生了什么:sizeof(int)是4,当我写了+ 3而不是添加3到17,3 * 4正在加入。

但是,如果有人能够更有说服力地解释它,我将不胜感激。

谢谢!

3 个答案:

答案 0 :(得分:5)

对于C ++版本,试试这个:

int *a = (int *)17;
printf("%d", a + 3);

是的,你的解释是正确的......

这称为指针算法,按照你说的方式工作。但请注意,您在此处使用的代码,您为指向int的指针指定常量值的代码在现实生活中很少进行。指针值通常来自某种内存分配函数,例如C中的malloc或C ++中的new(尽管new不是函数)。

答案 1 :(得分:3)

它不是正确的C ++代码。

int * a = 17;

这是无效的。您无法将int隐式转换为指针。你可以施展它,但如果我是你,我就不会这样做。

答案 2 :(得分:2)

你想要这样的东西:

int foo = 17;
int* a = &foo;
printf("%d\n", (*a) + 3);

您发布的代码尝试将指针设置为17的地址,这可能不是有效地址,即使您需要从int转换为指针(int* a = (int*)17;)。然后,您将添加到该地址,并输出其上方有三个int大小的地址。我真的不认为这就是你想要的。