1.函数与数组
函数使用数组名作为参数时,实际上传递的时数组第一个元素的地址,因为在访问数组中的元素时,数组名和指针之间起着等效的作用,因此可以通过以下3种方式在函数中传递数组。
(1)函数使用数组名作为作为形参
(2)函数使用指针指向的地址作为形参
(3)函数访问数组中某段区间的元素
注:函数无法返回数组,但可以返回指向数组的指针
示例代码
#include<iostream>
using namespace std;
const int Asize=10;
//函数使用数组名作为作为形参
void useArray(int arr0[],int n);
//函数使用指针指向的地址作为形参
void usepArray(int* parr1,int n);
//函数访问数组中某段区间的元素
void usepArraydur(const int* pbegin,const int* pend);
int main()
{
//调用函数
int arr[Asize]={1,2,3,4,5,6,7,8,9,0};
int *ps = arr;
//函数使用数组名作为作为形参
useArray(arr,Asize);
usepArray(arr,Asize);
usepArraydur(arr+2,arr+5);
cout<<"------------------"<<endl;
//函数使用指针指向的地址作为形参
usepArray(ps,Asize);
useArray(ps,Asize);
usepArraydur(ps+2,ps+5);
return 0;
}
void useArray(int arr0[],int n)
{
//cout<<"***Function useArray***"<<endl;
for(int i=0;i<n;i++)
{
cout<<arr0[i]<<" ";
}
cout<<"\r\n";
//cout<<"\r\n***Function useArray Done***\r\n"<<endl;
}
void usepArray(int* parr1,int n)
{
//cout<<"***Function usepArray***"<<endl;
for(int i=0;i<n;i++)
{
cout<<*(parr1+i)<<" ";
}
cout<<"\r\n";
//cout<<"\r\n***Function usepArray Done***\r\n"<<endl;
}
void usepArraydur(const int* pbegin,const int* pend)
{
//cout<<"***Function usepArraydur***"<<endl;
const int* ps;
for(ps=pbegin;ps!=pend;ps++)
{
cout<<*(ps)<<" ";
}
cout<<"\r\n";
//cout<<"\r\n***Function usepArraydur Done***\r\n"<<endl;
}
输出
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
3 4 5
------------------
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
3 4 5
2.函数与结构
(1)可以像传递普通变量那样将按值传递结构,此时传递的是结构的一个副本,修改它不会改变调用它的函数中结构的内容;也可以直接返回结构。
(2)可以传递指向结构的地址,使用&运算符获得结构的地址,并使用指针访问结构的内容;若修改结构则会改变函数中的内容。
(3)可以使用引用传递结构,可以在函数中直接使用并改变结构的内容
示例代码
#include<iostream>
using namespace std;
struct Point{
int x;
int y;
};
void useStruct0(Point points);//像传递普通变量那样将按值传递结构
void useStruct1(Point* p_points);//传递指向结构的地址
void useStruct2(Point &points);//可以使用引用传递结构
int main()
{
//声明和初始化三个结构
Point points0,points1,points2;
points0.x=10;
points0.y=100;
points1=points0;
points2=points0;
//像传递普通变量那样将按值传递结构
useStruct0(points0);
cout<<"product0=points0.x*points0.y\r\n=";
cout<<points0.x<<"*"<<points0.y<<"="<<points0.x*points0.y<<endl<<endl;
//传递指向结构的地址
Point* p_point1=&points1;
useStruct1(p_point1);
cout<<"product1=points1.x*points1.y\r\n=";
cout<<points1.x<<"*"<<points1.y<<"="<<points1.x*points1.y<<endl<<endl;
//可以使用引用传递结构
useStruct2(points2);
cout<<"product2=points2.x*points2.y\r\n=";
cout<<points2.x<<"*"<<points2.y<<"="<<points2.x*points2.y<<endl<<endl;
return 0;
}
void useStruct0(Point points)
{
points.x+=10;
points.y+=100;
}
void useStruct1(Point* p_points)
{
p_points->x+=10;
p_points->y+=100;
}
void useStruct2(Point &points)
{
points.x+=10;
points.y+=100;
}
输出
product0=points0.x*points0.y
=10*100=1000
product1=points1.x*points1.y
=20*200=4000
product2=points2.x*points2.y
=20*200=4000