为了账号安全,请及时绑定邮箱和手机立即绑定

为什么C-Array在传递给函数时有一个错误的size of()值?

为什么C-Array在传递给函数时有一个错误的size of()值?

C C++
冉冉说 2019-07-02 11:20:56
为什么C-Array在传递给函数时有一个错误的size of()值?完整的例子:#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;}在将其传递给函数之前,size of给出了正确的值。在函数中的相同数组上执行完全相同的操作会产生奇怪的结果。少了一个元素。为什么?
查看完整描述

3 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

因为数组是腐朽作为函数参数传递给指针,因此sizeof分别为32位和64位平台提供4和8。


查看完整回答
反对 回复 2019-07-02
?
ibeautiful

TA贡献1993条经验 获得超5个赞

因为在C、C+和Object-C中,函数实际上不可能有数组参数。它们只能有这样的参数看起来像数组参数,但它们不是..在你的例子中,

void test(int arr[])

编译器看到“有一个参数看起来像一个int数组”,它用一个“指针到int”替换这个参数。所以你写的函数是绝对的,百分之百,和

void test (int* arr)

因此,在函数size of(Arr)中,将给出“指针到int”的大小。


查看完整回答
反对 回复 2019-07-02
  • 3 回答
  • 0 关注
  • 525 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信