指针预测输出

Pointers predict the output

本文关键字:输出 指针      更新时间:2023-10-16
#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 ("%dt", sizeof(mat));   i=4;j=5;
    printf( "%d", *(p+i+j));
}

谁能帮我处理一下这段代码的输出?我知道(mat)的尺寸将打印50。但请帮我打印第二张

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

的值

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

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

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

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

我猜你的意思是打印p所指向的值和存储在ij中的值