关于C语言指针及内存的一些基本问题

char a[20];
int *ptr=(int *)a;
ptr++;
//原来a是char*类型,强制转换为int*类型就是因为ptr是int*类型的吗?
//在ptr加1后,文章给出的解释是”原来ptr 是指向数组a 的第0 号单元开始的四个字节,此时指向了数组a 中从第4 号单元开始的四个字节” ,”第0号单元开始的第四个字节”该怎么理解?根据int的大小,ptr指向了更高位的四个字节处,为什么说是从第0个单元到了第4个单元?
希望得到高手的讲解

第一 你写的是int* a就已经把a转换为int类型的指针了 就像int e (double) e把int转换为double表示
第二指针的数值代表指向的对象的地址 对指针加1等价于对指针的值加上它指向的对象的字节的大小 一个int 一般也4个字节 所以就是加4追问

如果理解为整形指针值加1就是指向更高位的四个字节处的话 也就是从字符数组的第0个字符变为指向第3个字符了吗? 如果是这样的话,文章里的”第0个单元的第四个字节”这个位置该怎么理解?

追答

一个int值普遍大小为4个字节 第零个单元的第四个字节 也就是下一个int值开始的地址

追问

这里的”单元”是理解为4个字节吗?因为int是4个字节

追答

可以这么理解 四个字节构成的单元内容

追问

感谢!

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答