函数(一)
五、函数
1.指针形参 void SetR(int * pi) 【局部副本】
2.应用形参 void change( int &a,int &b) 【原数据】
使用引用形参可以返回额外的信息。
3.传递指向指针的引用 void fun( int *&V)
4.vector和其他容器类型的形参
通常函数不应该有容器类型的形参,调用普通的非引用类型的vector形参函数会复制vector中每个元素。
从避免复制的角度看,应该将类型定义为引用。实际中更倾向于通过传递指向容器中需要处理的元素的迭代器来传递容器。
void printff(vector<int>::const_iterator start,vector<int>::const_iterator end)
5.数组形参
处理数组的函数通常通过操纵指向数组中元素的指针来处理数组。
(1)数组形参的定义(非引用)
如果定义函数输出int型数组的值。
//函数操纵的是指向数组元素的指针
void printFun(int*){} void printFun1(int[]){}
//在传递数组时,实参是指向数组第一个元素的指针,形参复制的是指针的值(副本)。
//函数操纵的是指针的副本,因此不会改变实参的指针。
//函数可通过该指针(副本)改变其指向的数组,通过指针形参做的改变都在改变数组元素本身。
void f (constint *) //不需要改变其元素时,声明为const
(2)传递给函数的数组处理
1.在数组本身放置一个结束标记来监测。(eg:null)
2.使用标准库规范【分别传参数组第一个元素和最后一个元素下一个位置的指针。】
3.显示传递数组大小的形参。
2和3的例子。
void printV(char * start,char * end)
{
while (start !=end)
{
cout<<*start++<<endl;
}
}
void printV1(constint *pv,size_tlen)
{
for (size_t i = 0; i < len; i++)
{
cout<<pv[i]<<endl;
}
}
void main()
{
char * str="china";
printV(str,str+5);
int nums[]={1,4,6,8,9};
printV1(nums,sizeof(nums)/sizeof(*nums));
system("pause");
}