【发布时间】:2011-12-30 14:14:14
【问题描述】:
我(我想我)明白,如果数组的大小是在编译时在堆栈上声明的,则只能检索数组的大小(使用 sizeof),例如
int my_array[] = {1,2,3};
sizeof(my_array) == 3;
一旦开始使用指针,就会丢失此长度信息。
例如如果将指向 int 的指针作为函数参数传递以将 int 数组获取到函数中,则不能再以这种方式使用 sizeof(),它只会返回用于存储指针的字节数。
显然,了解数组的长度至关重要。
那么在传递数组时我应该使用以下哪个选项?
-
传递一个指针和一个伴随的长度参数
int my_func(int *my_array, size_t len_my_array) -
创建我自己的向量结构
struct vector { int *my_array; size_t len; } int my_func(struct vector *my_vector) 使用别人的向量实现。 (C 是否有与 C++ 一样的默认实现?)
我错过的另一种方法?
(我目前正在使用第一个选项,但它有点笨拙,我很想知道这是否被认为是糟糕的编程习惯)
【问题讨论】:
-
sizeof(my_array) == 3; => sizeof(my_array)/sizeof(int) == 3;
标签: c arrays parameters