
*(*(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 代表什么意思?
// 为啥最外面还要*求值呢
}
} 展开
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 代表什么意思?
// 为啥最外面还要*求值呢
}
} 展开
3个回答
展开全部
*(a+i)+j代表的是第 i行,j列的那个元素,这个没有问题吧。
而那个元素是指针。不是值,所以再加*取值。 这和普通的 *p=a;一个意思。
主要原因是数组里面放的全部都是指针,你可以看你定义时候的声明就知道了。
而那个元素是指针。不是值,所以再加*取值。 这和普通的 *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这个指针值指向的数据就被你取到了。明白了吧
展开全部
给你一个形象的例子,假设有个一维数组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个*号。
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语言对待数组都是一维的,线性的,这个一定要搞清楚。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是哪种语言的程序啊?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询