C++旧版课程库
C++第 2 期查看课程总览

062 函数 - 指针传递(一维数组的处理)

主要内容

指针传递

在讲值传递的时候,我们还没有给出数组的传参方式。

#include <iostream>

void dashima(int x[])  // 【请注意,是 int x[]】
{
    for(int i=0;i < 4;++i)
        cout << x[i] << ",";
}
int main()
{
    int x[]={0,1,2,3};
    f4(x);
    return 0;
}
看似普通的调用方法,其实有一些不同。 请运行下面的例子。

#include <iostream>

void dashima(int a[])
{
    for(int i=0;i < 4;++i)
        cout << a[i] << ",";
    cout << "In dashima, " << sizeof(a) << endl;
}
int main()
{
    int x[]={0,1,2,3};
    cout << "In main, " << sizeof(x) << endl;
    dashima(x);
    return 0;
}
输出应该是

In main, 16
0,1,2,3,
In dashima, 8  // 这里是因为,函数 dashima 中的数组,其实变成了指针。
请运行下面的例子,验证指针的大小。

#include < iostream >

void dashima(int* a)
{
    for(int i=0;i < 4;++i)
        cout << x[i] << ",";
    cout << "In dashima, " << sizeof(a) << endl;
}
int main()
{
    int x[]={0,1,2,3};
    cout << "In main, " << sizeof(x) << endl;
    dashima(x);
    return 0;
}
【C++中,作为函数参数的数组,会转化成指针】 这带来了一个重大的影响
  • 数组的长度,无法在函数中求解。
  • 请解释一下为什么。 所以,为了明确这个变化,在使用一维数组作为形参时,一般明确指明,使用“指针传递”,注意,一般还需要传入数组长度。(请运行)
    
    #include < iostream >
    
    void f4(int* x, int length)
    {
        for(int i=0; i< length; ++i)
            cout << x[i] << ", ";
    }
    int main()
    {
        int x[]={0,1,2,3};
        f4(x, 4);
        return 0;
    }
    

    习题

    课后练习