指针预测输出

时间:2014-07-24 17:39:14

标签: c++ pointers

#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

2 个答案:

答案 0 :(得分:2)

尝试将第二个语句更改为:

printf("%d",*(p)+i+j );

我猜您的意思是打印p指向的值与ij

中存储的值的总和

答案 1 :(得分:2)

*(p+i+j)将打印存储在地址p + i*sizeof(int) + j*sizeof(j)

的值

由于数组以线性方式存储在堆栈中,i equals 4j equals 5这将显示数组的第9个int的值,因此mat[1][4]等于{{ 1}}

同样对于5的结果,它将是sizeof(mat)。我假设你的int存储在两个字节上,因为你说它会打印50但它完全取决于你的计算机。在今天的计算机上通常更长4个字节,因此它也可以打印5*5*sizeof(int)