为什么c语言的指针➕1是向后移动2位,不是移动4位,一个指针不是4byte吗?那应该移动4位才对呀

如题所述

注意指针的移动不是指的加上指针的大小,另外你的说法也有问题,指针的大小与平台是有关的,与CPU的寻址能力也是有关的,如如果编译32位程序那么指针大小是4字节=32位,如果编译64位程序那么指针大小为64位,因为现在一般编译器所编译的默认为32位程序,所以就有了指针大小一般为4字节的说法,实际指针大小应以编译器中sizeof为准

int *p;
printf("%d",sizeof(p));
然后说到你的问题,指针的移动是指针指向元素的移动,比如指针指向一个整形数组
int a[5];
int *p=a;//p指向数组的首地址即第一个元素
p=p+1;//这时p指向数组的第二个元素,也就是说现在p保存的是数组第二个元素的地址
从这里看出,p的移动是从指向第一个元素移动到指向第二个元素,这里定义int型占两个字节,所以p从指向第一个元素转为指向第二个元素p要越过第一个数组元素所占用的内存空间2个字节,同理,如果数组是char型,p移动一个那么地址变动为1个字节追答

仔细看书,夯实基础

追问

int 不是4个字节吗?怎么变成2个字节了?大神

不好意思我是自学c语言的

追答

每一种变量都不是固定大小的,和平台与编译器有关,变量所占的内存空间应该以编译器中sizeof为准,我上面提到了sizeof的用法,你可以试试,比如vc++ 6.0中int是两个字节但是在别的编译器中或平台上有可能不一样

之所以有sizeof函数就是因为每个平台变量大小可能不同,当你需要malloc分配内存的时候如果你按int为4个字节分配但是有些平台int为两个字节那么你的程序就出错了,而sizeof自动获取变量大小正好解决了这个问题,加油,慢慢学习积累多就会理解了

追问

谢谢鼓励

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-07-17
如果你写在中括号里面就是了这么写就是name的指针从开始向后移4位之后把后面的都输出了就想你写test[1].name显示的应该是LiYun是一个意思呀