c - 函数参数作为具有声明大小的数组

标签 c parameters

我经常使用以下约定来通知客户端代码一个函数需要一个定义大小的数组参数:

/* File foo.h */
int foo (int arg[10]);

我想向客户代码传达的信息是,他们必须提供具有 10 个位置的 int 类型的数组。

我知道这不是很常见,所以我来这里问:我是否遗漏了这个约定的任何副作用?无论如何有害吗?

谢谢!

最佳答案

如果你想坚持得到一个大小为10的数组,你可以使用:

int foo (int (*arg)[10]);

这样做的副作用是:

  1. 在函数中,你必须使用:

    (*arg)[index] 
    

    不仅仅是

    arg[index]
    
  2. 调用函数必须使用:

    int array[10];
    foo(&array);
    

    代替

    int array[10];
    foo(array);
    
  3. 您不能使用超过 10 个元素的数组。

    int array[20];
    foo(&array);   // Not OK.
    
  4. 您不能使用 malloced 数组。

    int* array = malloc(sizeof(int)*10);
    foo(array);   // Not OK.
    

现在选择危害最小的解决方案。

关于c - 函数参数作为具有声明大小的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28970931/

相关文章:

c - fscanf 的哪个占位符?

sql-server - 如何在SSIS中调用存储过程?

c++ - 结构作为C++中的参数

带通配符的 BASH 参数

c - 进程间信号量有时无法按预期工作

c - 为什么链表的变量必须是指针

c - opencv 无法与 NetBeans 一起使用

c - 为什么标准托管 C 中的 "file"概念如此通用?

asp.net/vb.net System.Web.UI.WebControls.RepeaterItemEventArgs 问题

c++ - C++ 和 C 中的可变参数列表