1

我一直在研究 C 中的指针,从我的读数来看,矩阵的内存地址分配遵循线性模式,即使矩阵是二维的。我用一个简单的算法做了一个实验来打印每个矩阵元素的地址,我试图理解它的结果。它遵循 4 x 4 模式,即使矩阵是 5x5。这是为什么?它不应该遵循像“1、2、3 ...”这样的1 x 1模式吗?

int main()
{
    int size = 5;
    int matriz[size][size];
    int i, j;
    for(i=0;i<size;i++) {
        for(j=0;j<size;j++) {
            matriz[i][j] = rand();
            printf("Address %d\n", &matriz[i][j]);
        }
    }
    return 0;
}

在此处输入图像描述

4

2 回答 2

5

在您的系统上,sizeof(int)是 4。每个 int 占用 4 个字节。所以每个下一个 int 的地址都高 4 个。

尝试不同的类型,例如 char、short 或 double。

于 2021-08-08T01:07:54.993 回答
4

矩阵的元素是类型int。Anint在您的系统上显然是 4 个字节宽,因此矩阵的每个元素在内存中相隔 4 个字节。

于 2021-08-08T01:07:09.057 回答