#include <stdio.h>
void main (void){
int mat [5][5],i,j;
int *p;
p = &mat [0][0];
for (i=0;i<5;i++)
for (j=0;j<5;j++)
mat[i][j] = i+j;
printf ("%d\t", sizeof(mat)); i=4;j=5;
printf( "%d", *(p+i+j));
}
有人可以帮我解决这个片段的输出。我知道sizeof(mat)会打印50。但帮我第二次printfc
答案 0 :(得分:2)
尝试将第二个语句更改为:
printf("%d",*(p)+i+j );
我猜您的意思是打印p
指向的值与i
和j
答案 1 :(得分:2)
*(p+i+j)
将打印存储在地址p + i*sizeof(int) + j*sizeof(j)
由于数组以线性方式存储在堆栈中,i equals 4
和j equals 5
这将显示数组的第9个int的值,因此mat[1][4]
等于{{ 1}}
同样对于5
的结果,它将是sizeof(mat)
。我假设你的int存储在两个字节上,因为你说它会打印50但它完全取决于你的计算机。在今天的计算机上通常更长4个字节,因此它也可以打印5*5*sizeof(int)
。