2

出于好奇,我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;
        }
    }   
};
4

2 回答 2

6

在 C 中,数组的普通名称与指向其第一个元素的指针相同。这称为阵列的衰减。有关进一步的解释,请参阅C 常见问题解答。

于 2012-10-24T07:36:40.697 回答
1

这里 array1 具有第一行(或列)的整个数组的地址,具体取决于实现。(&array1[0])与sice(array1)类型相同,()[n]数组名称本身包含 ist 元素的地址。但是当您传递(&array)哪种类型时()[m][n],编译器会因为参数类型不匹配而引发错误。

我想你还没有阅读我在你问的最后一个问题中的评论

于 2012-10-24T07:49:34.127 回答