【发布时间】:2021-10-01 20:24:46
【问题描述】:
我刚刚开始学习 C 中的二维数组,我遇到了这段代码,其中二维数组像 ++array 这样直接预递增。
我尝试在 3 个不同的位置打印矩阵(初始化后、递增后的函数中、函数调用后的主函数中),但我不明白预递增是如何工作的。
我还注意到a[1][1]++ 反映在原始矩阵中(8 递增到 9),但没有别的。
#include <stdio.h>
void printmatrix(int[3][3]);
int function(int a[][3])
{
int i,j;
++a; //what does this do?
printf("In function...\n");
printmatrix(a);
a[1][1]++;
}
void printmatrix(int a[3][3])
{
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
printf("\n");
}
int main()
{
int a[3][3]={1,2,3,4,5,6,7,8,9};
printf("Initially...\n");
printmatrix(a);
function(a);
printf("In main...\n");
printmatrix(a);
printf("a[2][1]-a[1][2]=%d",a[2][1]-a[1][2]);
return 0;
}
我得到的输出是,
Initially...
1 2 3
4 5 6
7 8 9
In function...
4 5 6
7 8 9
32765 0 0
In main...
1 2 3
4 5 6
7 9 9
a[2][1]-a[1][2]=3
此外,当我在主函数中声明数组后尝试预递增数组时,出现以下错误。
int a[3][3]={1,2,3,4,5,6,7,8,9};
a++;
main.c: In function ‘main’:
main.c:28:2: error: lvalue required as increment operand
a++;
【问题讨论】:
-
将函数参数声明为数组时,编译器将其视为指针。所以参数声明
int a[][3]真的是int (*a)[3]。这就是为什么你可以增加它。当您在正确的数组上使用++时,这是不可能的,因为数组不能“递增”。
标签: arrays c multidimensional-array increment pre-increment