二进制指针5
xiu多级指针
野指针
未赋值直接使用

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include "stdafx.h"
int main(int argc, char* argv[]) { char* p1; char** p2; char*** p3; char**** p4; char***** p5;
printf("%d",*p1); printf("%d",*(p1+0)); printf("%d",p1[0]);
getchar(); return 0;
}
|

多级指针
多级引用,在编译器眼中,指针取值用*和用[]完全一致,汇编代码没有任何区别
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #include "stdafx.h"
int main(int argc, char* argv[]) {
int i = 100; int* p1 = &i; printf("%d\n",*(p1)); printf("%d\n",*(p1+0)); printf("%d\n",p1[0]);
int** p2 = &p1; printf("%d\n",*(*(p2))); printf("%d\n",*(*(p2+0)+0)); printf("%d\n",p2[0][0]);
int*** p3 = &p2;
printf("%d\n",*(*(*(p3))));
printf("%d\n",*(*(*(p3+0)+0)+0));
printf("%d\n",p3[0][0][0]);
getchar(); return 0;
}
|

数组指针
int *px[5]
这个语句定义了一个数组
,数组中每个元素都是一个指向 int 类型变量的指针。px 本身是一个指向由 5 个指针元素组成的数组的指针。例如,下面的代码定义了一个 int 指针数组 px,其中包含 5 个元素:
以上语句定义一个大小为 5 的指针数组,每个元素的类型都是 int *,即指向 int 类型的指针。可以使用下标操作符 [] 访问数组元素,例如 px[0]、px[1]、px[2] 等。
int (*px)[5]
这个语句定义了一个指针
,这个指针指向一个包含 5 个 int 类型元素的数组。例如,下面的代码定义了一个 int 数组 arr,其中包含 5 个元素,然后定义了一个指向该数组的指针 px:
1 2
| int arr[5]; int (*px)[5] = &arr;
|
以上语句定义了一个 int 数组 arr,然后定义了一个指向该数组的指针 px。px 指向的是 arr 数组的首地址,因此可以使用 px(或 px[0])访问数组元素,例如 px[0]、px[1]、px[2] 等
特性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include "stdafx.h"
int main(int argc, char* argv[]) {
int arr[5]={1,2,3,4,5};
int (*p)[2];
p=(int (*)[2])arr;
printf("%p\n",p);
getchar(); return 0;
}
|

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include "stdafx.h"
int main(int argc, char* argv[]) {
short arr[8]={1,2,3,4,5,6,7,8};
short (*p)[2];
p=(short (*)[2])arr;
printf("%d\n",*(*(p+2)+1));
getchar(); return 0;
}
|
