数组和指针的讲解千篇一律,但是正在看博客的你是否真正调试观察过他们的区别? 理论不多说,建议小菜们把代码拷到编译器,仔细分析各个数值。
#include <stdio.h>
int main()
{
char * p = "abcdefgh";
char a[] = "abcdefgh";
printf("%p\n", &p[0]);
printf("%p\n", p);
printf("%p\n", &p);
printf("\n");
printf("%p\n", &a[0]);
printf("%p\n", a);
printf("%p\n", &a);
printf("%p\n", a + 1);
printf("%p\n", &a + 1);
return 0;
}
重点说明:如图,a和&a的地址居然一样!不错,a代表是a[0]即第一个元素地址,&a代表整个数组的地址;所以“a+1”的地址是a[1]的地址是"&a+1"的地址从0012FF38跳到0012FF41即刚好是数组a的大小。