c - C中这些形式参数的含义

标签 c pointers multidimensional-array

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

int c[][10];

int (*c)[10];

这两个怎么一样?我没有感觉到它。任何人都可以用一些例子来解释第二个试图做什么吗? 抱歉,如果之前有人问过这个问题。请将我重定向到副本(如果有)。

最佳答案

作为函数参数,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;
}

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

关于c - C中这些形式参数的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17340583/

相关文章:

数出所有的四个字母的单词

c++ - 什么时候通过引用传递函数参数,什么时候通过地址传递?

c - 什么时候值得在结构定义中使用指向结构的指针?

c++ - 删除从 C++ 中的 void 强制转换的指针是否安全?

javascript - 循环遍历多维数组并构建路径图

arrays - 如何从 ListView 中的多维数组返回值(VBA)

javascript - 2D 数组未转换为 D3 map 坐标

c - 为什么我的 C 编译器会发出警告?

c - 非法浮点值

c - 字符串未正确标记