跳至正文
View Categories

1 min read

主要内容 #

指针传递 #

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

#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;
    }

    习题 #

    课后练习