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元素宽).
脚步:
int multi[ROWS][COLS];- 这multi是一个二维数组.
multi + row- 这里multi腐烂成了一个类型的指针int (*)[COLS]
*(multi + row)- 这相当于multi[row],即此表达式的类型int[COLS].