*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]的一些资料收集的主要内容,如果未能解决你的问题,请参考以下文章