我是
靠谱客的博主
甜甜保温杯,这篇文章主要介绍
int *p[4]与int (*q)[4]的区别,现在分享给大家,希望可以做个参考。
以上定义涉及两个运算符:“*”(间接引用)、“[]”(下标),“[]”的优先级别大于“*”的优先级别。
首先看int *p[4],“[]”的优先级别高,所以它首先是个大小为4的数组,即p[4];剩下的“int *”作为补充说明,即说明该数组的每一个元素为指向一个整型类型的指针。int *p[4]的存储结构如下:(存储方格横向排列或竖向排列没区别,只要按内存地址顺序排列就行,此处只是为画图方便)
![[转载]int <wbr>*p[4]与int <wbr>(*q)[4]的区别 [转载]int <wbr>*p[4]与int <wbr>(*q)[4]的区别](https://file2.kaopuke.com:8081/files_image/2023062413/202306241322036003045.jpg)
再看int (*q)[4]。它首先是个指针,即*q,剩下的“int [4]”作为补充说明,即说明指针q指向一个长度为4的数组。int (*q)[4]的存储结构如下:
![[转载]int <wbr>*p[4]与int <wbr>(*q)[4]的区别 [转载]int <wbr>*p[4]与int <wbr>(*q)[4]的区别](https://file2.kaopuke.com:8081/files_image/2023062413/202306241322058594600.jpg)
请看以下定义:
int a[2][4]={{2,5,6,8},{22,55,66,88}};
int c[4]={5,8,9,4};
int d[3]={23,12,443};
int *p[4],(*q)[4];
q=a;
*p=c;
*(p+1)=d;
则int *p[4]和int (*q)[4]的存储数据为:
![[转载]int <wbr>*p[4]与int <wbr>(*q)[4]的区别 [转载]int <wbr>*p[4]与int <wbr>(*q)[4]的区别](https://file2.kaopuke.com:8081/files_image/2023062413/202306241322064047684.jpg)
![[转载]int <wbr>*p[4]与int <wbr>(*q)[4]的区别 [转载]int <wbr>*p[4]与int <wbr>(*q)[4]的区别](https://file2.kaopuke.com:8081/files_image/2023062413/202306241322075405299.jpg)
验证:
#include <stdio.h>
int main(void)
{
int a[2][4]={{2,5,6,8},{22,55,66,88}};
int c[4]={5,8,9,4};
int d[3]={23,12,443};
int *p[4],(*q)[4];
q=a;
*p=c;
*(p+1)=d;
int i,j;
for(i=0;i<2;i++)
for(j=0;j<4;j++)
{
if((i==1)&&(j==3)) break;
printf("*(*(p+%d)+%d)=%dn",i,j,*(*(p+i)+j));
}
puts("===============");
for(i=0;i<2;i++)
for(j=0;j<4;j++)
printf("*(*(q+%d)+%d)=%dn",i,j,*(*(q+i)+j));
return 0;
}
输出结果为:
*(*(p+0)+0)=5
*(*(p+0)+1)=8
*(*(p+0)+2)=9
*(*(p+0)+3)=4
*(*(p+1)+0)=23
*(*(p+1)+1)=12
*(*(p+1)+2)=443
===============
*(*(q+0)+0)=2
*(*(q+0)+1)=5
*(*(q+0)+2)=6
*(*(q+0)+3)=8
*(*(q+1)+0)=22
*(*(q+1)+1)=55
*(*(q+1)+2)=66
*(*(q+1)+3)=88
|
最后
以上就是甜甜保温杯最近收集整理的关于int *p[4]与int (*q)[4]的区别的全部内容,更多相关int内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复