
2个回答
展开全部
有区别。我们可以把它们转化为 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) 是正确的表达。
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) 是正确的表达。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |