c语言指针数组问题
通常可用一个指针数组来指向一个二维数组。指针数组中的每个元素被赋予二维数组每一行的首地址,因此也可理解为指向一个一维数组。inta[3][3]={1,2,3,4,5,6,...
通常可用一个指针数组来指向一个二维数组。 指针数组中的每个元素被赋予二维数组每一行的首地址, 因此也可理解为指向一个一维数组。
int a[3][3]={1,2,3,4,5,6,7,8,9};
int *pa[3]={a[0],a[1],a[2]};
int *p=a[0];
main(){
int i;
for(i=0;i<3;i++)
printf("%d,%d,%d\n",a[i][2-i],*a[i],*(*(a+i)+i));
for(i=0;i<3;i++)
printf("%d,%d,%d\n",*pa[i],p[i],*(p+i));
}
最后一行输出语句中 p[i],和*(p+i)是哪里冒出来的 真是不解(明明在说明时候指针数组名就是pa) 会冒出个p
冒出来了又表示什么含义 麻烦用一些理论性知识来告诉我 谢谢啦 想明白了 我再上机看结果 展开
int a[3][3]={1,2,3,4,5,6,7,8,9};
int *pa[3]={a[0],a[1],a[2]};
int *p=a[0];
main(){
int i;
for(i=0;i<3;i++)
printf("%d,%d,%d\n",a[i][2-i],*a[i],*(*(a+i)+i));
for(i=0;i<3;i++)
printf("%d,%d,%d\n",*pa[i],p[i],*(p+i));
}
最后一行输出语句中 p[i],和*(p+i)是哪里冒出来的 真是不解(明明在说明时候指针数组名就是pa) 会冒出个p
冒出来了又表示什么含义 麻烦用一些理论性知识来告诉我 谢谢啦 想明白了 我再上机看结果 展开
展开全部
int *p=a[0];
这里不是有定义了一个指针并初始化指向了a[0]吗
p[i] 和 *(p+i) 都表示 a[0][i] 因为数组本质的表达式是 *(a[0]+i) 也就是该元素加上变偏移地址
就等于所要求的元素地址 a[0][i] 是简便的表示方法 由此推出 p[i] 等于 *(p+i) 而p指向 a[0]
所以和上边的等价
只要记得 二维数组只不过是个指向数组的数组 所以本质他还是一个一维数组
这里不是有定义了一个指针并初始化指向了a[0]吗
p[i] 和 *(p+i) 都表示 a[0][i] 因为数组本质的表达式是 *(a[0]+i) 也就是该元素加上变偏移地址
就等于所要求的元素地址 a[0][i] 是简便的表示方法 由此推出 p[i] 等于 *(p+i) 而p指向 a[0]
所以和上边的等价
只要记得 二维数组只不过是个指向数组的数组 所以本质他还是一个一维数组
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个题目比较蛋疼,但是只要理解指针,其实也不难理解
就是手工计算繁琐一点
二维数组,相当于两层指责你,**
*(*(a+i)+j)这个表示第i行第j个元素的值,。如果不理解,记住即可
有两个*,是两层指针
pa看了你没问题
关键是p
p在程序中有定义,在pa的后面
a a[0] &a[0][0]这三个指针虽然只想同一个地方,是a首地址的值,但是用起来是不一样的
就是手工计算繁琐一点
二维数组,相当于两层指责你,**
*(*(a+i)+j)这个表示第i行第j个元素的值,。如果不理解,记住即可
有两个*,是两层指针
pa看了你没问题
关键是p
p在程序中有定义,在pa的后面
a a[0] &a[0][0]这三个指针虽然只想同一个地方,是a首地址的值,但是用起来是不一样的
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int *p=a[0];相当于变量p存放a数值的首地址,如p=&a[0][0];可用于顺序访问a数值。
p[i]就相当于a[i],也是*(p+i)。具体地址计算是,先取变量p存储的地址(a的首地址),
然后加上i*sizeof(int)个字节的偏移,相当于在a中找到第i个int取出。
p[i]就相当于a[i],也是*(p+i)。具体地址计算是,先取变量p存储的地址(a的首地址),
然后加上i*sizeof(int)个字节的偏移,相当于在a中找到第i个int取出。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当指针变量指向数组元素时,指针变量可以带下标,p=a[0],故p[i]=a[0][i];*(p+1)也是代表a[o][i],其实你只要弄明白二维数组是怎样存储的,遇到这类问题就可以迎刃而解了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
他们的意义都是指同一个东西,同一块内存表现的形式不同;
前者是表明要指针数组的第i个元素的地址;后者是要p的地址的移动i个int 指针类型后的位置上的数据
前者是表明要指针数组的第i个元素的地址;后者是要p的地址的移动i个int 指针类型后的位置上的数据
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询