c ++的数组大小正在使用sizeof进行更改

时间:2014-07-27 13:19:09

标签: c++ arrays

我有一个简单的main,称为简单方法,数组作为参数
数组中的大小是正确的,但是当我尝试打印数组时,我会变得不同 sizeof数组:

int bubbleSort(int arr[]) // yeah i know this sort is not complete 
{
    int arrSize = sizeof(arr); // HERE IS SIZE IS 4 
    bool bSorted = true;
    while(bSorted)
    {
        for(int i=0;i<arrSize;i++)
        {

            if(arr[i]>arr[i+1])
            {
                int tmp =  arr[i];
                arr[i] = arr[i+1];
                arr[i+1] = tmp;
            }


        }
        bSorted = false;
    }

    return 1;
}


int  main(int argc, char* argv[])
{


    int arr[] = {4,3,7,8,9};
    bubbleSort(arr);
    int sOf = sizeof(arr); // HERE THE SIZE IS 20 ????
    for(int j=0;j < sOf ;j++)
    {
        printf("%d",arr[j]);
    }
    return 0;
}

2 个答案:

答案 0 :(得分:4)

您不能通过值将数组*作为函数参数传递(也不能以这种方式返回它们)。语法void f(int a[])只是语法糖,在每个方面都与void f(int * a)相同,而函数参数是指针,而不是数组。所以你最终测量指针的大小。

替代语法可以作为一种松散的意图文档,表示您计划使用数组元素的地址调用此函数,但指针语法没有实际差异。

*)因此,数组类型和函数类型都受到约束,这就是人们经常说他们不是类型系统的一等公民的原因。

答案 1 :(得分:0)

由于语言很愚蠢,这个:

int bubbleSort(int arr[])

实际上意味着:

int bubbleSort(int* arr)

所以sizeof(arr)是指针的大小。