我是靠谱客的博主 纯真大门,这篇文章主要介绍C++的函数与指针,现在分享给大家,希望可以做个参考。

函数与指针

一个函数在编译时被分配一个入口地址,这个入口地址就称为函数的指针。在C++中, 函数名代表函数的入口地址。

  • 指针作函数的参数-实现地址传递
  • 返回指针的函数
  • 利用指向函数的指针调用函数

指针作函数的参数-实现地址传递

指针作函数的参数,具有以下用途:

  • 指针作函数参数,这时形参接受的是实参的地址。函数中通过对指针的间接访问实现参数的按“引用传递”功能
  • 设置多个指针参数可从函数中带回多个结果值
  • 对于传递一块连续的内存区域数据,传递首地址比传递数

据值不仅开销小而且效率高

例如:

编写交换两个变量值的函数(地址传递)

相当于改变两个指针指向的变量内容。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void swap(int *px, *py) { int t; t = *px; *px = *py; *py = t; } int main() { int x=2, y=3; cout<<"调用前:x="<<x<<",y="<<y<<endl; swap(&x, &y); cout<<"调用后:x="<<x<<",y="<<y<<endl; return 0; }

/*
输出:
调用前:x=2, y=3
调用后:x=3, y=2
*/


例如:

利用指针参数带回函数中的多个值

计算一维数组元素的平均值,并能带回数组中的最大值与最小值

函数原型设计如下:

double faver(int s[], int n, int *max, int *min);
其中:
s-一维数组
n-数组中元素个数
max-指向最大值
min-指向最小值
将平均值作为函数的返回值

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
double faver(int s[],int n,int *max,int *min) { double aver=s[0]; *max= *min =s[0]; for(int i=1;i<n;i++) { aver+=s[i]; if(s[i]>*max)*max=s[i]; if(s[i]<*min)*min=s[i]; } return aver/n; } int main() { int a[5]={80,89,67,76,98}, max, min; double aver; aver=faver(a,5,&max,&min); //调用函数 cout<<"max="<<max<<"n"<<"min="<<min<<endl; cout<<"aver="<<aver<<endl; return 0; } /* max=98 min=67 aver=82 */

返回指针的函数

返回指针的函数定义格式如下

复制代码
1
2
3
4
类型 * 函数名(形式参数表) { 语句序列 }

其中:

类型 * 为函数的返回值类型,是一个指针类型

例子

编写函数,返回字符串中首次出现的非空格字符开始的字符串

如:" using namespace std;" 返回"using namespace std;"

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
char * noblank(char * str) { while(*str == ' ') str++; return str; } int main() { char *s1 = " using namespace std;", *s2; s2 = noblank(s1); cout << s2 << endl; return 0; }

指向函数的指针变量

使用指向函数的指针变量可以存放函数的指针

指向函数的指针变量定义格式如下:

复制代码
1
函数返回值类型 ( * 指针变量名 ) (形参类型表列);

注意,中间的括号不能省略

例如:

定义指向double型函数的指针变量,该函数有一个double型参数

复制代码
1
2
double (*pf)( double ); pf=sqrt; //pf 指向一个平方根函数

时,使用*pf可以调用该函数。

复制代码
1
2
cout<<(*pf)(2.0)<<endl; //输出根号2的值 与 cout<<sqrt(2.0)<<endl; 表示式是等价的

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注靠谱客的更多内容!

最后

以上就是纯真大门最近收集整理的关于C++的函数与指针的全部内容,更多相关C++内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(122)

评论列表共有 0 条评论

立即
投稿
返回
顶部