p++、*p++、*(p++)是在p所指向的地址上加1。

 1 //*(p++)等同于*p++ 
 2 #include<stdio.h> 
 3 int main(void)
 4 {
 5     int *p;
 6     int a[5]={1,4,3,2,5};
 7     p=a;
 8     printf("首地址p是%p\n",p);
 9     printf("第一个数是%d\n",*p);
10     printf("*(p++)对应的输出为%d\n",*(p++)); 
11     printf("*(p++)之后p的地址是%p\n",p);
12     printf("*(p++)之后对应的*p是%d\n",*p);
13 //    printf("(*p)[4]的结果为%d\n",*p[4]); 
14 //    printf("%p\n",p++);
15 //    printf("%p\n",*p++);
16 //    printf("%p\n",*(p++));
17     return 0;
18 }

 

*(++p)与*++p相同

 1 //*(++p)与*++p相同 
 2 #include<stdio.h>
 3 int main(void)
 4 {
 5     int a[5]={1,3,5,2,4};
 6     int *p;
 7     p=a;
 8     printf("首地址为:%p\n",p);
 9     printf("第一个数为:%d\n",*p);
10     printf("*(++p)对应的输出为:%d\n",*(++p));
11     printf("*(++p)之后的p是:%p\n",p);
12     printf("对应的*p是:%d\n",*p);
13     return 0;
14 }

 

(*p)++:是在p所指向的数据上加1

 

 1 #include<stdio.h> 
 2 int main(void)
 3 {
 4     int a=1;
 5     int *p;
 6     p=&a;
 7 //    printf("首地址p是%p\n",p);
 8 //    printf("第一个数是%d\n",*p);
 9     printf("%d\n",(*p)++); 
10 //    printf("*(p)++之后p的地址是%p\n",p);
11     printf("%d\n",a);
12 //    printf("(*p)[4]的结果为%d\n",*p[4]); 
13 //    printf("%p\n",p++);
14 //    printf("%p\n",*p++);
15 //    printf("%p\n",*(p++));
16     return 0;
17 }

 

 

 

1)int* p[2] 是一个指向int型的指针数组,即:p是包含两个元素的指针数组,指针指向的是int型。可以这样来用:

 

 1 #include<stdio.h>
 2 int main(void)
 3 {
 4     int* p[2];               //是一个指向int型的指针数组。即: p是包含两个元素的指针数组。
 5                              //指针指向类型 是int型 
 6     int a[3]={1,2,3};
 7     int b[4]={4,5,6,7};
 8     p[0]=a;
 9     p[1]=b;
10     int i;
11     printf("指针数组p[0]的结果:");
12     for(i=0;i<3;i++)
13     {
14         printf("%d ",*p[0]+i);
15     }
16     printf("\n");
17     printf("指针数组p[1]的结果:");
18     for(i=0;i<4;i++)
19     {
20         printf("%d ",*p[1]+i);
21     }
22     return 0;
23 }

 

 

 (2)对于 int (*p)[2], 它相当于一个二维数组的用法,只是它是一个n行2列的数组,可以这样来用:

 

 1 #include<stdio.h>
 2 int main(void)
 3 {
 4     //此为n*2型的数组的指针用法,即行数不确定,列数确定。 
 5     int (*p)[2];    //相当于一个二维数组的用法,只是它是一个n行2列的数组
 6     int b[3][2]={{1,2},{3,4},{5,6}};
 7     p=b;
 8     int i,j;
 9     printf("(*p)[2]数组的结果为:\n");
10     for(i=0;i<3;i++)
11     {
12         for(j=0;j<2;j++)
13         {
14             printf("%d ",p[i][j]);
15         }
16         printf("\n");
17     } 
18     return 0;
19 }

 

 

注意:

(1)为行数确定、列数不确定,即为2*n型的。

(2)为n*2型的数组的指针用法,即行数不确定、列数确定。

对于(1)其等价形式如下:

 

 1 #include<stdio.h>
 2 #include<malloc.h> 
 3 int main(void)
 4 {
 5     int **array=(int **)malloc(sizeof(int *)*2);
 6     int a[3]={1,2,3};
 7     int b[4]={5,6,7,8};
 8     array[0]=a;
 9     array[1]=b;
10     int i;
11     printf("array[0]数组的元素为:\n");
12     for(i=0;i<3;i++)
13     {
14         printf("%d ",array[0][i]);
15     }
16     printf("\n");
17     printf("array[1]数组的元素为:\n");
18     for(i=0;i<4;i++)
19     {
20         printf("%d ",array[1][i]);
21     }
22     return 0;
23 }

 

 

 

 

参考文献:
https://blog.csdn.net/DLUTBruceZhang/article/details/9268497?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase

https://blog.csdn.net/nice__xixi/article/details/81004515?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

https://blog.csdn.net/qq_39986161/article/details/81252523