*(*(p+i)+j)

这个怎么理解?

定义二维数组:int a[i][j];
定义一个指针:int *p;
p=a;

p+i:是第i行的首地址.
*(p+i)是第i行第0列元素的地址.
*(p+i)+j是第i行第j列元素的地址.
*(*(p+i)+j)是第i行第j列元素所对应的值.
温馨提示:内容为网友见解,仅供参考
第1个回答  2007-09-07
数组指针表示二维数组,*(*(p+i)+j)是第i行第j列对应的元素的值
第2个回答  2012-09-12
第一个回答有问题!大家一定要注意了!int*p[j]才是正确定义二维数组的指针的方法。
第3个回答  2007-09-08
是一个二维指针,相当于数组p[i][j];
第4个回答  2018-12-24
😊

看倒数第5行,“*(*(p+i)+j)”我看不懂啊,求解释一下
p+i:是第i行的首地址。(p+i)是第i行第0列元素的地址。与p+i等效,也与p[i],&p[i][0]等效 (p+i)+j是第i行第j列元素的地址。(*(p+i)+j)是第i行第j列元素所对应的值。

*(*(p+i)+j)怎么解释? p是指针 p+i 就应该是指向下个元素的首地址 那么...
p+i表示指向第i行,*(p+i)是第i行的首地址,*(p+i)+j表示的就是指向第i行第j列的地址,*(*(p+i)+j)就是第第i行第j列的元素值了

*(*(p+i)+j)
定义二维数组:int a[i][j];定义一个指针:int *p;p=a;p+i:是第i行的首地址.(p+i)是第i行第0列元素的地址.(p+i)+j是第i行第j列元素的地址.(*(p+i)+j)是第i行第j列元素所对应的值.

scanf("%d",(*(p+i))+j)什么意思
这个是用来输入二维数组的 (p+i)就是p[i]也就是二维数组p第i行的首地址 这个是int*型 这样 (p+i))+j 就是第i行 第j个元素的地址 等效于 &p[i][j]

*(p+i)+j的运算顺序
先执行p+i,然后执行*(p+i) ,取出地址p+i中的值,最后与j相加

p++是什么意思, p+ i+ j是什么意思?
p++ 就是把 p里面的内容+1个单位,因为 p存的是地址,所以是 地址+1,也就是下一个地址。而*p 是 取内容的意思,即 取当前存放内容对应(指向)的地址 里面的内容。p是指针,*(p+i)+j是指向二维数组第i行第j个元素的。变量q的值是变量b的地址。

C语言subscript requires array or pointer type错误是什么意思_百度知 ...
意思是对于非数组和指针类型的变量,不能用[]这样的下标符号。下标表达式,形如p[i],等价于*(p+i),其中+是指针加法,数值上相当于+ sizeof(*p) * i。“多维”的下标表达式如p[i][j],由结合性等价于(p[i])[j],即*(p[i]+j),也就是*(*(p+i)+j)。[]和一元*操作符的操作数...

int *[] 和int (*)[]的区别?
后者int (*)[],是一个行指针。定义了之后就可以这样用printf("%d",*(*(p+i)+j));为什么是行指针呢?就是告诉计算机我这里定义了一个指针,如果移动一下你就要给我移动一个长度为5的单位。因为二维数组在内存中不是像我们逻辑思维一样存储行行列列的,它是一下子甩开一大串存完第一行存第二...

C语言 main() {int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23},(*p...
j=1 i=1,j=0 i=1,j=1 第一组:k=k+*(*(p+i)+j)第二组:k=k+*(*(p+i)+j) 注意k的值已变化 第三组:k=k+*(*(p+i)+j) 注意k的值已变化 第四组:k=k+*(*(p+i)+j) 注意k的值已变化 一时忘记怎么算(*p)[4]=a,i,j,k=0; 这个了 套用一下就可以了 ...

C语言中的*(*(p+i)+1)是什么意思?
猜得出,一般情况下,*(*(p+i)+1)表示二维数组第i行第1个元素的值(i和1都是下标)

相似回答