出于好奇,我将set_array(&array1[0])
中的行更改为set_array[array1]
,参数类型不同,但是它有效吗?
#include <stdio.h>
void set_array(int array[][9]);
int main(void) {
int array1[4][9];
for(int i = 0; i < 4; i++) {
for(int j = 0; j < 9; j++) {
array1[i][j] = j + 1;
}
}
set_array(&array1[0]);
for(int i = 0; i < 4; i++) {
for(int j = 0; j < 9; j++) {
printf("%d ", *(*(array1 + i) + j));
//printf("%d ", array1[i][j]);
}
puts("\n");
}
return 0;
}
void set_array(int array[][9]) {
for(int i = 0; i < 4; i++) {
for(int j = 0; j < 9; j++) {
array[i][j] = 1;
}
}
};
答案 0 :(得分:6)
在C中,数组的普通名称与指向其第一个元素的指针相同。这称为阵列的衰减。有关详细说明,请参阅C faq。
答案 1 :(得分:1)
这里array1具有第一行(或列)的整个数组的地址,具体取决于实现。 (&array1[0])
与(array1)
类型的()[n]
相同.sice数组名称本身包含ist元素的地址。但是当您传递(&array)
类型()[m][n]
时,编译器会抛出错误,因为参数类型不匹配。
我想你在上一个问题中没有看过我的评论