猿问

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

为什么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给出了正确的值。在函数中的相同数组上执行完全相同的操作会产生奇怪的结果。少了一个元素。为什么?


冉冉说
浏览 526回答 3
3回答

ABOUTYOU

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

ibeautiful

因为在C、C+和Object-C中,函数实际上不可能有数组参数。它们只能有这样的参数看起来像数组参数,但它们不是..在你的例子中,void&nbsp;test(int&nbsp;arr[])编译器看到“有一个参数看起来像一个int数组”,它用一个“指针到int”替换这个参数。所以你写的函数是绝对的,百分之百,和void&nbsp;test&nbsp;(int*&nbsp;arr)因此,在函数size of(Arr)中,将给出“指针到int”的大小。
随时随地看视频慕课网APP
我要回答