指针的高级应用

指针数组:本质是数组 只是数组的每个元素 是指针

 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
", *arr[1]);//*arr[1]=*&num2=num2
12 
13     printf("%d
",sizeof(arr));//12
14     printf("%d
",sizeof(arr2));//12
15     return;
16 }

1 void test02()
2 {
3     char *arr[3]={"hehehe","hahaha","heiheihei"};
4     printf("%d
", sizeof(arr));//12
5 
6     printf("%s
", arr[1]);
7     printf("%c
", *(arr[1]+1));
8 }

数组指针

 1 void test03()
 2 {
 3     int arr[5]={10,20,30,40};
 4     int (*p)[5];//数组指针:本质是一个指针变量 只是该变量 保存的是数组的首地址
 5 
 6     printf("%d
",sizeof(p));//4
 7 
 8     printf("p=%u
", p);
 9     printf("p+1=%u
", p+1);
10 
11     p = &arr;//&arr 才代表数组的首地址
12 
13     printf("%d
", *(*p+3));//40
14      //*(*p+3) == *(*(p+0)+3)==*(p[0]+3)==p[0][3]
15     printf("%d
", p[0][3]);//40
16 
17 }
总结:
指针数组:本质是数组 只是数组的每个元素是指针
数组指针:本质是指针变量 只是保存的是 数组的首地址
原文地址:https://www.cnblogs.com/loliconinvincible/p/12515850.html