*(*(a+i)+j)中*(a+i)+j 代表什么意思? // 为啥最外面还要*求值呢

#include<stdio.h>intmain(){inti,j;intb[2][2]={1,2,3,4};int(*a)[2]=b;for(i=0;i<2;i++)f... #include <stdio.h>

int main()
{
int i,j;
int b[2][2]={1,2,3,4};
int(*a)[2]= b;

for(i=0;i<2;i++)
for(j=0;j<2;j++)
{
printf("a[i]=%d\n",*(*(a+i)+j));
//*(*(a+i)+j)中*(a+i)+j 代表什么意思?
// 为啥最外面还要*求值呢
}
}
展开
 我来答
pengyun1314123
推荐于2017-11-24 · TA获得超过1458个赞
知道小有建树答主
回答量:1049
采纳率:0%
帮助的人:579万
展开全部
*(a+i)+j代表的是第 i行,j列的那个元素,这个没有问题吧。
而那个元素是指针。不是值,所以再加*取值。 这和普通的 *p=a;一个意思。
主要原因是数组里面放的全部都是指针,你可以看你定义时候的声明就知道了。
更多追问追答
追问
怎么只对a+i进行星号运算*(a+i)   // j不进行星号运算?
追答
当然算,首先要取的是数组的值呀,而a数组的值是指针呀,也就是说本身
a+i就是一个指针,而且不是存放在a+i这个地方的这个指针。而是只想a+i这个位置的指针的指针。
比如
(a+i)+j处放的是 0x0001;
那么(a+i)+j它是指向0x0001的一个指针,他的值可能是0x4854;随意的一个数字。
你加*取到的是0x0001。你再加*。那么0x0001这个指针值指向的数据就被你取到了。明白了吧
100duman
2011-12-19 · TA获得超过966个赞
知道小有建树答主
回答量:1014
采纳率:100%
帮助的人:298万
展开全部
给你一个形象的例子,假设有个一维数组a,
a代表数组a的首地址,也就是&a对吧,*a为第一个元素的值,*a+1为第二个元素的值,也就是*(a+1);
现在是二维数组b
*(b+i)其实就是*b+i对吧,表示数组b的第i行地址,没有问题吧?*(b+i)+j表示第i行地址又便宜了j个单元,也就是数组b的第i行第j列元素的地址,这里没有问题吧?再加个*号,*(*(b+i)+j)就是第i行第j列元素的值。记住一点一维数组要获取元素的值,必然有1个*号,二维数组要获取元素的值,必然有2个*号。
更多追问追答
追问
*(*(b+i)+j)     *(b+i) 这个还好理解点,数组指针貌似是二级指针 所以要**(b+i) ,  最外面的大括号*()分别对*(b+i)与j 解引用对吧 ( 是对*j 解引用,对一个一维数组解引用)

有一点我不理解 外层循环俩次,内层j就应该输出4次啊?怎么就输出2个数呀?
追答
整个数组是4个元素啊,都会输出的啊。C语言将数组都当线性处理的,二维肯定要看成每个元素又包含多个元素的一维数组的,最好是自己在编译环境下,调试下看看内存情况。C语言对待数组都是一维的,线性的,这个一定要搞清楚。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
江山如画成仙F
2011-12-19 · TA获得超过6196个赞
知道小有建树答主
回答量:1288
采纳率:85%
帮助的人:733万
展开全部
这是哪种语言的程序啊?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式