我努力更好地理解指针,我写了这段代码:
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正在加入。
但是,如果有人能够更有说服力地解释它,我将不胜感激。
谢谢!
答案 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
大小的地址。我真的不认为这就是你想要的。