C中这些形式参数的含义

sum*_*mdi 0 c pointers multidimensional-array

我在C函数的形式参数中读了这两种不同类型的多维数组声明.

int c[][10];

int (*c)[10];

这两个怎么样?我感觉不到它.任何人都可以用一些例子解释这个,第二个人试图做什么?对不起,如果以前曾经问过这个问题.如果有的话,请将我重定向到副本.

Ela*_*zar 8

作为函数参数,int* cint c[]甚至int c[7]是相同的.见C FAQ.

[10]部分仅告诉编译器如何进行访问数组中元素的算法 - 例如c[3][5].这两个声明都是针对多维数组的,其第二维(就编译器而言,在此函数内)的大小为10.

例:

#include <stdio.h>

int sum_all(int c[][2], int len) {
    int res = 0, i ,j;
    for (i=0; i < len; i++)
        for (j=0; j < 2; j++)
            res += c[i][j];
    return res;
}

int main() {
    int a[3][2] = { { 1, 2}, {3, 4}, {5, 6} };
    printf("sum is %d\n", sum_all(a, 3));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

请注意,在此示例中,未检查数组的大小为2.我们本可以通过一维数组.编译器不关心; 我们只告诉他如何访问这个数组中的元素.