为什么将指向数组的指针传递给需要指向int的指针的函数,可以正常工作

mko*_*mko 2 c multidimensional-array

出于好奇,我将行更改为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;
        }
    }   
};
Run Code Online (Sandbox Code Playgroud)

hal*_*lex 6

在C中,数组的普通名称与指向其第一个元素的指针相同.这称为阵列的衰减.有关进一步说明,请参阅C faq.

  • *在此上下文*中,数组的名称求值为指向其第一个元素的指针.在C的其他情况下,两者并不相同. (2认同)