*p++,p++,*(p++)(*p)++(*p)[n],*p[n]的一些资料收集

Posted sbb-first-blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了*p++,p++,*(p++)(*p)++(*p)[n],*p[n]的一些资料收集相关的知识,希望对你有一定的参考价值。

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
",p);
 9     printf("第一个数是%d
",*p);
10     printf("*(p++)对应的输出为%d
",*(p++)); 
11     printf("*(p++)之后p的地址是%p
",p);
12     printf("*(p++)之后对应的*p是%d
",*p);
13 //    printf("(*p)[4]的结果为%d
",*p[4]); 
14 //    printf("%p
",p++);
15 //    printf("%p
",*p++);
16 //    printf("%p
",*(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
",p);
 9     printf("第一个数为:%d
",*p);
10     printf("*(++p)对应的输出为:%d
",*(++p));
11     printf("*(++p)之后的p是:%p
",p);
12     printf("对应的*p是:%d
",*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
",p);
 8 //    printf("第一个数是%d
",*p);
 9     printf("%d
",(*p)++); 
10 //    printf("*(p)++之后p的地址是%p
",p);
11     printf("%d
",a);
12 //    printf("(*p)[4]的结果为%d
",*p[4]); 
13 //    printf("%p
",p++);
14 //    printf("%p
",*p++);
15 //    printf("%p
",*(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("
");
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]数组的结果为:
");
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("
");
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]数组的元素为:
");
12     for(i=0;i<3;i++)
13     {
14         printf("%d ",array[0][i]);
15     }
16     printf("
");
17     printf("array[1]数组的元素为:
");
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


 

以上是关于*p++,p++,*(p++)(*p)++(*p)[n],*p[n]的一些资料收集的主要内容,如果未能解决你的问题,请参考以下文章

*p++(*p)++*++p++*p 的区别

++*p,(*p)++,*p++与*++p四者的区别

模运算

(*p)++和*(p++)和*p++的区别

*a=p和*a=&p的区别是啥呀 *a=p是否相当于a=&p

模运算的规则