将数组作为参数传递给C语言

bph*_*bph 2 c arrays parameters

我(我想)理解你只能在堆栈的编译时声明数组的大小(使用sizeof),例如

int my_array[] = {1,2,3};
sizeof(my_array) == 3;
Run Code Online (Sandbox Code Playgroud)

一旦开始使用指针,就会丢失此长度信息.

例如,如果您将指向int的指针作为函数参数传递以将int数组传递给函数,您不能再sizeof()以这种方式使用它,它将只返回用于存储指针的字节数.

显然,了解阵列的长度至关重要.

那么在传递数组时我应该使用以下哪个选项?

  1. 传递指针和附带的长度参数

    int my_func(int *my_array, size_t len_my_array)

  2. 创建我自己的矢量结构

    struct vector {
       int *my_array;
       size_t len;
    }
    
    int my_func(struct vector *my_vector)
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用别人的矢量实现.(是否存在C的默认实现,因为有C++?)

  4. 我错过了另一种方法吗?

(我目前正在使用第一个选项,但它有点笨拙,我很想知道这是否被认为是糟糕的编程习惯)

Luc*_*ore 6

你错过的一种方法是在数组的末尾放置一个终止元素,有点像'\0'标记结束char*.

这个并将数组的长度作为不同的参数传递是通常的方法.


rer*_*run 5

标准方法是利用第一种方法并传递指针和大小,特别是如果您希望其他人重用您的代码。