指针的高级应用
指针数组:本质是数组 只是数组的每个元素 是指针。
1 void test01() 2 { 3 int num1 = 10; 4 int num2 = 20; 5 int num3 = 30; 6 //指针数组 7 int *arr[3]={&num1, &num2, &num3}; 8 char *arr2[3]; 9 //arr[0] = &num1, arr[1]=&num2, arr[2]=&num3 10 11 printf("%d\n", *arr[1]);//*arr[1]=*&num2=num2 12 13 printf("%d\n",sizeof(arr));//12 14 printf("%d\n",sizeof(arr2));//12 15 return; 16 }
1 void test02() 2 { 3 char *arr[3]={"hehehe","hahaha","heiheihei"}; 4 printf("%d\n", sizeof(arr));//12 5 6 printf("%s\n", arr[1]); 7 printf("%c\n", *(arr[1]+1)); 8 }
数组指针
1 void test03() 2 { 3 int arr[5]={10,20,30,40}; 4 int (*p)[5];//数组指针:本质是一个指针变量 只是该变量 保存的是数组的首地址 5 6 printf("%d\n",sizeof(p));//4 7 8 printf("p=%u\n", p); 9 printf("p+1=%u\n", p+1); 10 11 p = &arr;//&arr 才代表数组的首地址 12 13 printf("%d\n", *(*p+3));//40 14 //*(*p+3) == *(*(p+0)+3)==*(p[0]+3)==p[0][3] 15 printf("%d\n", p[0][3]);//40 16 17 }
总结:
指针数组:本质是数组 只是数组的每个元素是指针
数组指针:本质是指针变量 只是保存的是 数组的首地址