指针作为参数
- 数组作为参数
- 地址传递
- 传参为指针:定义了一个普通指针p指向了这个数组
int sum(int a[],int len)
{
...
}
{
int a[10] = {...};
...sum(a,10);
}
我们知道,函数是在栈中开辟的内存,通常数组很大,再拷贝一份显然很浪费资源,而且效率不高,其实我们可以传入指针,直接操作原数组即可
一维数组作为参数
数组名就是函数的首地址
#include <iostream>
using namespace std;
int sum1(int a[],int len){
//int a[]表示传入是一维数组的首地址,光有地址还不够,不知道边界,还需要指定数组长度
int sum=0;
for (int i = 0; i < len; i++)
{
sum += a[i];
}
return sum;
}
int sum2(int *p,int len){ // int *p等价于int a[], *a=*(a+0)
//理解,定义了一个普通指针p指向了这个数组
int sum=0;
for (int i = 0; i < len; i++,p++)
{
sum += *p;
}
return sum;
}
int main(int argc, char const *argv[])
{
int a[3] = {1,2,3};
cout << "sum:"<< sum1(a,3)<<endl;
cout << "sum:"<< sum2(a,3)<<endl;
return 0;
}
sum:6
sum:6