数组元素之间的地址是相连的;
变量地址绝对不是相连的,如果找到规律那也只是一个偶然的,不是必然的;
1. 指针变量和一位数组
下面对指针数组进行分析,index(小标是从0开始),array数组是int类型,每一个元素占据4个字节。

#includeint main(void){  int a[5] = {10,20,30,40,50};  int *p;  printf("a[0]的地址:%d\n",&a[0]);   // 取地址  printf("a[1]的地址:%d\n",&a[1]);  printf("a[2]的地址:%d\n",&a[2]);  printf("a[3]的地址:%d\n",&a[3]);  printf("a[4]的地址:%d\n",&a[4]);printf("--------------------------------\n");  printf("a的地址:%d\n",a);    // 数组名 a = a[0]  printf("a+1的地址:%d\n",a+1);   // 相当于 a[1] 的地址  printf("a+2的地址:%d\n",a+2);     printf("a+3的地址:%d\n",a+3);  printf("a+4的地址:%d\n",a+4);  return 0;}
2. 指针变量引用一维数组
#includeint main(void){  int a[5] = {10,20,30,40,50};  int *p;  printf("&a[2]+2的地址:%d\n",&a[2]+2);  // 等于 &a[4] // *a[2] 这样取数组的值会报错的  printf("*(a+2)的值:%d\n",*(a+2)); // a[2] = 30printf("*a+3的值:%d\n",*a+3); // 13 (*星号的优先级高于 + 先算 *a的值再加3)  printf("--------------------------------\n");p = a; // p = &a;printf("p的地址:%d\n",p);  printf("p+1的地址:%d\n",p+1);  printf("p+2的地址:%d\n",p+2);  printf("p+3的地址:%d\n",p+3);  printf("p+4的地址:%d\n",p+4);  printf("--------------------------------\n");printf("*p的值:%d\n",*p);  printf("*(p+1)的值:%d\n",*(p+1));  printf("*(p+2)的值:%d\n",*(p+2));  printf("*(p+3)的值:%d\n",*(p+3));  printf("*(p+4)的值:%d\n",*(p+4));printf("--------------------------------\n");p = &a[2];  printf("p的地址:%d\n",p);   // &a[2]  printf("p+1的地址:%d\n",p+1);  // &a[3]  printf("p+2的地址:%d\n",p+2);  // &a[4]  printf("p+3的地址:%d\n",p+3);  // &a[5]  野地址  printf("p+4的地址:%d\n",p+4);  // &a[6]  野地址printf("--------------------------------\n");
//a = &a[2];  //错误,a代表a[0]是一个常量,赋值只能给一个变量所以会出错,a 必须是一个左值  return 0;}
3. 指针一维数组地址关系

4. 指针一维数组内容关系

声明:
本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。
