C++ c++;正在使用sizeof更改数组的大小

C++ c++;正在使用sizeof更改数组的大小,c++,arrays,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) {

我有一个简单的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;
}
int-bubbleSort(int-arr[])//是的,我知道这种排序不完整
{
int arrSize=sizeof(arr);//这里的大小是4
bool bSorted=true;
while(b分类)
{
对于(int i=0;iarr[i+1])
{
int tmp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=tmp;
}
}
b分类=假;
}
返回1;
}
int main(int argc,char*argv[])
{
int arr[]={4,3,7,8,9};
泡泡运动;
int-sOf=sizeof(arr);//这里的大小是20°????
对于(int j=0;j
由于语言愚蠢,这:

int bubbleSort(int arr[])
实际上意味着:

int bubbleSort(int* arr)

因此
sizeof(arr)
是指针的大小。

由于语言愚蠢,这:

int bubbleSort(int arr[])
实际上意味着:

int bubbleSort(int* arr)

因此
sizeof(arr)
是指针的大小。

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

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


*)因此,数组类型和函数类型都受到限制,这就是为什么人们经常说它们不是类型系统的一等公民。

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

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


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

使用
std::Array
<代码> ARR < /Cord>是函数中的一个指针。在C++程序中,尤其是在简单的C++程序中,不要使用C样式数组。使用<代码> STD::代码> ARR < /Cord>是函数中的指针。在C++程序中,尤其是在简单C++程序中,不要使用C样式数组。这个宏是如何在函数的边上而不是在内部工作的:γ定义数组大小(数组)(siZeof((数组))/ siZeof((数组[0)))@user63898它不工作的原因相同。那么这个宏呢?它在函数外部工作,但在函数内部不工作:#定义数组_SIZE(数组)(sizeof((数组))/sizeof((数组[0]))@user63898它不工作的原因相同。