gpt4 book ai didi

c++ - 为什么 C 数组在传递给函数时有错误的 sizeof() 值?

转载 作者:行者123 更新时间:2023-11-30 17:22:07 25 4
gpt4 key购买 nike

完整示例:

#include <stdio.h>

void test(int arr[]) {
int arrSize = (int)(sizeof(arr) / sizeof(arr[0]));
printf("%d\n", arrSize); // 2 (wrong?!)
}

int main (int argc, const char * argv[]) {
int point[3] = {50, 30, 12};

int arrSize = (int)(sizeof(point) / sizeof(point[0]));
printf("%d\n", arrSize); // 3 (correct :-) )

test(point);

return 0;
}

在将其传递给函数之前,sizeof 给出了正确的值。在函数中的完全相同的数组上执行完全相同的操作会产生奇怪的结果。缺少一个元素。为什么?

最佳答案

当您将数组传递给 C 中的函数时,数组会衰减为指向其第一个元素的指针。当您在参数上使用 sizeof 时,您将获取指针的大小,而不是数组本身。

如果您需要函数知道数组的大小,则应该将其作为单独的参数传递:

void test(int arr[], size_t elems) {
/* ... */
}

int main(int argc, const char * argv[]) {
int point[3] = {50, 30, 12};
/* ... */
test(point, sizeof(point)/sizeof(point[0]));
/* ... */
}

另请注意,出于类似的原因(将 sizeof 用作指针),sizeof(point)/sizeof(point[0]) 技巧并不适用适用于动态分配的数组,仅适用于在堆栈上分配的数组。

关于c++ - 为什么 C 数组在传递给函数时有错误的 sizeof() 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28102509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com