加入CSDN是出于记录,希望有不足之处多加指正。
1、指针代码分析 &a#includeint main(int argc, char const *argv[]) { int (*p)[5] = NULL; int arr[5] = {1,2,3,4,6}; p = &arr; //p 指向的是整个数组的首地址 printf("arr = %pn", arr); printf("&arr = %pn", &arr); printf("p = %pn", p); printf("*p = %pn", *p); printf("p+1 = %pn", p+1); printf("p+1 = %pn", p+1); printf("(*p)+1 = %pn", (*p)+1); }
运行结果:
gec@ubuntu:~/cyy$ ./zhizheng arr = 0x7ffd568442d0 //数组首元素的首地址 &arr = 0x7ffd568442d0 //整个数组的首地址 p = 0x7ffd568442d0 //整个数组的首地址 *p = 0x7ffd568442d0 //通过指针来访问了该数组首元素 p+1 = 0x7ffd568442e4 //p 的类型为int [5] 所以加 1相当于加5个整型20字节 p+1 = 0x7ffd568442e4 //p 的类型为int [5] 所以加 1相当于加5个整型20字节 (*p)+1 = 0x7ffd568442d4 //*p 相当于arr + 1,arr是数组首元素的首地址,+1就加一个整型大小4字节2、指针代码分析 &a+1 和 a+1
#includeint main(int argc, char const *argv[]) { int a[5] = {1,2,3,4,5}; int b[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}; printf("&a = %pn",&a); printf("&a+1 = %pn",&a+1); //&a 表示整个数组 +1,加一个数组大小 printf("a = %pn",a); printf("a+1 = %pn",a+1); //a 表示数组首元素的首地址 +1,表示增加一个单位 return 0; }
运行结果:
gec@ubuntu:~/cyy$ ./zhi2 &a = 0x7ffc7b441010 &a+1 = 0x7ffc7b441024 a = 0x7ffc7b441010 a+1 = 0x7ffc7b4410143、首地址的指向重要性
#includeint main(int argc , char const *argv[]) { int arr[] = {1,2,3,4,5}; int *p = &arr[2]; printf("%d ,%d ,%d ,%d ,%dn",*(p - 2),*(p - 1),*p,*(p + 1),*(p + 2)); return 0; }
运行结果:
gec@ubuntu:~/cyy$ ./zhi3 1 ,2 ,3 ,4 ,54、指针 ++ 运算顺序
#includeint main(int argc, char const *argv[]) { int a[3] = {1,2,3}; int *p; p = a; printf("%d", *(++p)); return 0; }
运行结果:2



