1

我可以使用 c 中的 sizeof 运算符进行一些计算,以获取函数中的行数,该函数仅接收一个二维数组作为参数,而没有关于此传递数组中的行数或列数的任何信息?

void main(void){
    int A[5][6];
    int columnsC = sizeof(A[0]) / sizeof(int);
    int rowsC = ( sizeof(A)/sizeof(int) ) / columnsC;
    printf("rows: %d\ncolumns: %d\n", rowsC, columnsC);

    getch();
}

以前的代码对我有用,但我找不到有用的资源来了解如何将其应用于以下标头的函数:

void fun(int arr[][10])

我正在学习编程语言原理课程,有时会以不同的方式思考问题并寻找学习资源,这很有帮助,但这次显然不是。

我很佩服任何帮助。

4

2 回答 2

6

不。当传递给函数时,无法找到数组的大小。数组在传递给函数时衰减为指针。

这个:

void fun(int arr[][10])

实际上是合成糖:

void fun(int (*arr)[10])

相反,您可以将大小作为第三个参数传递,或者将大小作为数组本身的元素传递。

于 2012-12-16T21:12:50.890 回答
1

我不相信这是可能的,除非您传递一个长度,或者您专门为数组分配一个额外的行。这个额外的行可以包含一个空字符。在函数 fun 中,您可以使用 while 循环循环遍历数组,直到达到空值。

int i = 0;
while (1) {
    if(arr[i]==NULL){
        //exits when hits end    
        break;
    }
    //do stuff with arr[i]
    i++;
}
于 2012-12-16T21:12:32.393 回答