如何将C语言中的函数(参数传递)复习(5)改写成长尾?

2026-04-16 21:342阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计837个文字,预计阅读时间需要4分钟。

如何将C语言中的函数(参数传递)复习(5)改写成长尾?

一、参数传递+1. 非引用形参,则是复制实参的值,函数不会修改实参的值;引用形参,则是复制实参的地址,函数会修改实参的值。

二、指针形参,修改指针形参不会改变实参指针指向的值,但可以改变指针指向的内容。

一、参数传递

1.非引用形参,则是复制实参的值,函数不会修改实参的值;引用形参,则是实参的别名,将会修改实参的值。

2.指针形参,修改指针形参不会改变实参指针,但可以改变实参指向的对象:

1 void swap(int *a,int *b) 2 { 3 int temp; 4 tenp=*a; 5 *a=*b; 6 *b=temp; 7 cout<<*a<<","<<*b<<endl;//输出2,1 8 int x=100; 9 *a=&x; 10 *b=&x;//修改形参指针 11 } 12 13 int main(){ 14 int i=1,j=2; 15 cout<<&i<<","<<&j<<endl; 16 swap(&i,&j); 17 cout<<i<<","<<j<<endl;//输出2,1,改变了实参指向的对象 18 cout<<&i<<","<<&j<<endl;//但是没有改变实参的地址 19 system("pause"); 20 return 0; 21 } 22

3.const形参,在调用函数时,如果函数使用非引用非const形参,则既可以传递const实参,也可以传递非const实参;

但如果函数使用非const引用形参,则不能通过const对象进行调用,也不能通过右值进行调用。

1 int abc(int &value) 2 { 3 return ++value; 4 } 5 6 const int v1=100; 7 //int r=abc(v1);错误,v1是const类型 8 //int r=abc(0);错误,0是右值

如果将形参定义为const类型,则在函数中,不能改变实参的局部副本。

4.使用引用形参返回额外信息:函数的返回值只有1个,如果想要函数有多个返回值,可使用引用形参来实现。

5.利用const引用避免复制和修改。

对于大型对象,复制非常消耗时间,可以使用引用来避免复制,同时如果不想让函数修改该实参可以使用const。

6.指向指针的引用:int *&v1,从右向左理解,v1是一个引用,与指向int型对象的指针相关联。因此我们可以用它来交换两个指针的值。

7.数组形参:由于数组具有不可复制特性,因此不能当做形参;但是由于数组名自动转换成指向第一个元素的指针,所以数组函数可以通过指针来处理。

void values(int *); void values(int [ ]); void values(int [10]); //这是等价的

8.数组实参的处理:

(1)使用开始指针和结束指针,void values(const int *begin,const int *end);可以以此来遍历

如何将C语言中的函数(参数传递)复习(5)改写成长尾?

(2)指定数组大小,void values(const int ia[ ],size_t size);可以以此来遍历

9.main形参:

int main(int argc,char *argv[ ]){}; argc:形参个数,argv:形参数组,字符串数组,调用main时可以传递若干个字符串过来,char *argv相当于代表字符串。

本文共计837个文字,预计阅读时间需要4分钟。

如何将C语言中的函数(参数传递)复习(5)改写成长尾?

一、参数传递+1. 非引用形参,则是复制实参的值,函数不会修改实参的值;引用形参,则是复制实参的地址,函数会修改实参的值。

二、指针形参,修改指针形参不会改变实参指针指向的值,但可以改变指针指向的内容。

一、参数传递

1.非引用形参,则是复制实参的值,函数不会修改实参的值;引用形参,则是实参的别名,将会修改实参的值。

2.指针形参,修改指针形参不会改变实参指针,但可以改变实参指向的对象:

1 void swap(int *a,int *b) 2 { 3 int temp; 4 tenp=*a; 5 *a=*b; 6 *b=temp; 7 cout<<*a<<","<<*b<<endl;//输出2,1 8 int x=100; 9 *a=&x; 10 *b=&x;//修改形参指针 11 } 12 13 int main(){ 14 int i=1,j=2; 15 cout<<&i<<","<<&j<<endl; 16 swap(&i,&j); 17 cout<<i<<","<<j<<endl;//输出2,1,改变了实参指向的对象 18 cout<<&i<<","<<&j<<endl;//但是没有改变实参的地址 19 system("pause"); 20 return 0; 21 } 22

3.const形参,在调用函数时,如果函数使用非引用非const形参,则既可以传递const实参,也可以传递非const实参;

但如果函数使用非const引用形参,则不能通过const对象进行调用,也不能通过右值进行调用。

1 int abc(int &value) 2 { 3 return ++value; 4 } 5 6 const int v1=100; 7 //int r=abc(v1);错误,v1是const类型 8 //int r=abc(0);错误,0是右值

如果将形参定义为const类型,则在函数中,不能改变实参的局部副本。

4.使用引用形参返回额外信息:函数的返回值只有1个,如果想要函数有多个返回值,可使用引用形参来实现。

5.利用const引用避免复制和修改。

对于大型对象,复制非常消耗时间,可以使用引用来避免复制,同时如果不想让函数修改该实参可以使用const。

6.指向指针的引用:int *&v1,从右向左理解,v1是一个引用,与指向int型对象的指针相关联。因此我们可以用它来交换两个指针的值。

7.数组形参:由于数组具有不可复制特性,因此不能当做形参;但是由于数组名自动转换成指向第一个元素的指针,所以数组函数可以通过指针来处理。

void values(int *); void values(int [ ]); void values(int [10]); //这是等价的

8.数组实参的处理:

(1)使用开始指针和结束指针,void values(const int *begin,const int *end);可以以此来遍历

如何将C语言中的函数(参数传递)复习(5)改写成长尾?

(2)指定数组大小,void values(const int ia[ ],size_t size);可以以此来遍历

9.main形参:

int main(int argc,char *argv[ ]){}; argc:形参个数,argv:形参数组,字符串数组,调用main时可以传递若干个字符串过来,char *argv相当于代表字符串。