为什么`*(multi + row)`生成指针地址而不是值?

kan*_*aya 1 c pointers multidimensional-array

为什么要*(multi + row)生成指针地址而不是值?我很困惑,但必须有一个很好的解释,但我不知道.

#include <stdio.h>
#define ROWS 5
#define COLS 10
int multi[ROWS][COLS];
int main(void)
{
    int row, col;
    for (row = 0; row < ROWS; row++)
    {
        for (col = 0; col < COLS; col++)
        {
            multi[row][col] = row*col;
        }

    }
    for (row = 0; row < ROWS; row++)
    {
        for (col = 0; col < COLS; col++)
        {
            printf("\n%d ",multi[row][col]);
            printf("%d ",*(*(multi + row) + col));
        }
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

小智 7

它没有.multi是一个二维数组,因此在对它执行指针运算时取消引用它衰减的指针会产生一个数组(COLS元素宽).

脚步:

  1. int multi[ROWS][COLS];- 这multi是一个二维数组.

  2. multi + row- 这里multi腐烂成了一个类型的指针int (*)[COLS]

  3. *(multi + row)- 这相当于multi[row],即此表达式的类型int[COLS].