Los*_*_DM 0 c c++ gcc pointers
我努力更好地理解指针,我写了这段代码:
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,当我写了+ 3而不是添加3到17时,正在添加3*4 .
不过,如果有人能够更有说服力地解释它,我将不胜感激.
谢谢!
对于C++版本,试试这个:
int *a = (int *)17;
printf("%d", a + 3);
Run Code Online (Sandbox Code Playgroud)
是的,你的解释是正确的......
这称为指针算法,按照你说的方式工作.但请注意,您在此处使用的代码,您在指向a的指针中指定常量值int
很少在现实生活中完成.指针值通常来自某种内存分配函数,例如malloc
在C或new
C++中(尽管new
不是函数).