主要内容 #
指针传递 #
在讲值传递的时候,我们还没有给出数组的传参方式。
#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; }
习题 #