#include
int main() {
int a[] = { 1,2,3,4 };
int* q = a;
printf("%p\n%p\n", q, q+1);
return 0;
}
输出为:
000000629EF7F6A8
000000629EF7F6AC
q和q+1输出的内存地址只差了4个字符
教学视频说两者差了一个sizeof(int),那也就是4个字节
想请问一下为什么
000000629EF7F6A8 与 000000629EF7F6AC 就是相差 4个字节
int类型是四个字节,这里用的数组,指针p指向数组a的地址。p表示a[0],p+1表示a[1],所以就差了4个字节。
q是个int指针,所以它每移动一次就移动一个int的长度,也就是4个字节
确实可以。在这段程序中,int 数组 a[4] 被声明为4个int类型的整数变量,每一个整数变量的大小都是4个字节。所以,当指针 q 指向一个整数变量时,系统会为它预留 4 个字节储存空间,比如q指向a[0],指针q+1指向a[1],那么内存地址之间就应该差 4 个字节,也就是 q 和 q+1 的差异。