scanf(“%d”和(*a&“x2B”i)与scanf(“%d”和“a[i][j”)之间的差异
根据我的理解,a[i][j]可以理解为*(*a+i)+j,但我用其中两种符号扫描,我看到了区别,下面是代码片段scanf(“%d”和(*a&“x2B”i)与scanf(“%d”和“a[i][j”)之间的差异,c,arrays,C,Arrays,根据我的理解,a[i][j]可以理解为*(*a+i)+j,但我用其中两种符号扫描,我看到了区别,下面是代码片段 for (i=0;i<3;i++) { for(j=0;j<3;j++) { // scanf("%d",((*a+i)+j)); scanf("%d",&a[i][j]); printf("Address of &a[%d][%d]=%ld , Adr
for (i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
// scanf("%d",((*a+i)+j));
scanf("%d",&a[i][j]);
printf("Address of &a[%d][%d]=%ld , Adress of ((*a+%d)+%d)=%ld\n",i,j,&a[i][j] ,i,j, ((*a+i)+j));
}
}
有人能解释一下两种情况下的记忆表示法吗 一个简单的优先级问题<代码>(*a+1)应该是
*(a+1)
否则它就相当于:(*(a+0)+i+j)
你说过
根据我的理解,a[i][j]可以理解为*(*a+1)+j,但我用其中两种符号扫描,我看到了区别,下面是代码片段
for (i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
// scanf("%d",((*a+i)+j));
scanf("%d",&a[i][j]);
printf("Address of &a[%d][%d]=%ld , Adress of ((*a+%d)+%d)=%ld\n",i,j,&a[i][j] ,i,j, ((*a+i)+j));
}
}
我猜你是打错了。你的意思是*(*a+i)+j
,而不是*(*a+1)+j
然而,这也不是事实
a[i]
相当于*(a+i)
,而不是(*a+i)
)。由于运算符优先级,*a+i
相当于(*a)+i
,而不是*(a+i)
类似地,a[i][j]
相当于*(*(a+i)+j)
,而不是*(*a+1)+j
,(*(a+i)+j)
。注意内圆括号的位置。另外,使用%p
打印指针。使用%ld
是未定义的行为。