关于C++利用分文件实现冒泡法出现的问题

此问题系本人自学C++时所遇到的,希望大家可以帮忙解答一下~
首先是能达到预期的正确头文件及C++代码主体↓
头文件bubble sort.h

#include 
using namespace std;
void bubblesort(int * arr,int len)
{
    for (int i = 0; i < len - 1; i++)
    {
        for (int j = 0; j < len - 1 - i; j++)
        {
            if (arr[j] > arr[j+1])
            {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
    for (int i = 0; i < len; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;
}

C++主体

#include "bubble sort.h"
int main()
{
    int arr[10] = {4,3,6,9,1,2,10,8,7,5};
    int len = sizeof(arr) / sizeof(arr[0]);
    bubblesort(arr,len);
    system("pause");
    return 0;
}

而当我把数组长度由外界实参传输给形参的方法,改为直接在头文件里进行len的计算,并直接在本体中引用,却无法实现预期的效果。其头文件与C++主体如下(有变化的地方倾斜(前后加_)表示)
头文件bubble sort.h

#include 
using namespace std;
void bubblesort(_int * arr_)
{
    _int len = sizeof(arr) / sizeof(arr[0]);_
    for (int i = 0; i < len - 1; i++)
    {
        for (int j = 0; j < len - 1 - i; j++)
        {
            if (arr[j] > arr[j+1])
            {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
    for (int i = 0; i < len; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;
}

C++主体

#include "bubble sort.h"
int main()
{
    int arr[10] = {4,3,6,9,1,2,10,8,7,5};
    bubblesort(_arr_);
    system("pause");
    return 0;
}

后者实现的结果只有3和4两个数字。
希望大家能帮忙解答一下,非常感谢!

首先,数组长度只能由外界实参传递给形参。其次,改为在函数里进行len的计算,是得不到正确数组的长度的,因为形参传递过去的只是个地址,通过计算得不出数组的长度。

  • 其实你在 第二个里面打印一下,你算出来的 len 就知道了。 指针算出来的长度,不是原来数组定义的。

img