c语言指针问题

整形下*(p+i*4+j)与*(*(p+i)+j)有什么区别吗... 整形下 *(p+i*4+j) 与 *(*(p+i)+j) 有什么区别吗 展开
 我来答
金色潜鸟
2018-01-13 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5510万
展开全部
有区别。我们可以把它们转化为 p[i][j] 形式 ,容易 看出它们的不同。
c/c++ 语句中 [] 实质上是运算符,它与 求值 运算 (星号运算)有下列关系:
p[i]= *(p+i)。
根据上面所示关系, p[i][j] 可以 变化如下:
p[i][j] = (p[i])[j]= *( (p[i])+j) = *(*(p+i)+j); 这正好是你给的第二个式子。
而第一个式子 *(p+i*4+j) = p[i*4+j];
显然, p[i*4+j] 不同于 p[i][j], 语句中 p[i*4+j] 是地址,p[i][j] 是值。
程序例子:
#include <stdio.h>
int main(){
int p[3][4]={11,12,13,14,21,22,23,24,31,32,33,34, };
int i=1,j=2;
printf("%d %d \n", *(p+i*4+j), *(*(p+i)+j));
printf("%d %d \n", p[i*4+j], p[i][j]);
return 0;
}
显然,*(*(p+i)+j) 是正确的表达。
White_MouseYBZ
2018-01-13 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6332万
展开全部
显然p至少是二级指针。前者表示一个行(一级)指针,而后者表示第p+i行第j列的元素值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式