数组元素之间的地址是相连的;
变量地址绝对不是相连的,如果找到规律那也只是一个偶然的,不是必然的;
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. 指针一维数组内容关系
声明:
本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。