为什么 sizeof() 对于 C 函数中的数组参数的作用不同
在 C 中,数组在传递给函数,使得使用 sizeof() 来确定数组大小不可靠。为了理解这一点,我们来分析以下函数:
int length_of_array(int some_list[]) { return sizeof(some_list) / sizeof(*some_list); }
数组参数的问题
参数 some_list 被声明为数组,但函数签名为实际上相当于 int length_of_array(int* some_list)。这是因为数组在函数参数中衰减为指针。
对 sizeof() 的影响
在此上下文中使用 sizeof(some_list) 计算指针的大小,结果值为 1。除以 sizeof(*some_list) (整数的大小)得到1.
示例
在给定的示例中,尽管数组 num_list 包含 15 个元素,但函数 length_of_array() 始终返回 1,如输出所示:
This is the output from direct coding in the int main function: 15 This is the length of the array determined by the length_of_array function: 1
使用模板的解决方案函数
要确定函数中的数组大小,可以使用模板函数并通过引用传递数组:
template<size_t N> int length_of_array(int (&arr)[N]) { return N; }
在这种情况下,模板参数 N 捕获已知大小数组的大小,允许 sizeof() 返回正确的值。
以上是为什么 C 函数中的数组参数“sizeof()”返回意外结果?的详细内容。更多信息请关注PHP中文网其他相关文章!