今天小编就为大家分享一篇关于C++函数与指针的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
函数与指针
一个函数在编译时被分配一个入口地址,这个入口地址就称为函数的指针。在C++中, 函数名代表函数的入口地址。
- 指针作函数的参数-实现地址传递
- 返回指针的函数
- 利用指向函数的指针调用函数
指针作函数的参数-实现地址传递
指针作函数的参数,具有以下用途:
- 指针作函数参数,这时形参接受的是实参的地址。函数中通过对指针的间接访问实现参数的按“引用传递”功能
- 设置多个指针参数可从函数中带回多个结果值
- 对于传递一块连续的内存区域数据,传递首地址比传递数
据值不仅开销小而且效率高
例如:
编写交换两个变量值的函数(地址传递)
相当于改变两个指针指向的变量内容。
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-指向最小值
将平均值作为函数的返回值
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
*/
返回指针的函数
返回指针的函数定义格式如下:
类型 * 函数名(形式参数表)
{
语句序列
}
其中:
类型 * 为函数的返回值类型,是一个指针类型
例子
编写函数,返回字符串中首次出现的非空格字符开始的字符串
如:" using namespace std;"
返回"using namespace std;"
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;
}
指向函数的指针变量
使用指向函数的指针变量可以存放函数的指针
指向函数的指针变量定义格式如下:
函数返回值类型 ( * 指针变量名 ) (形参类型表列);
注意,中间的括号不能省略
例如:
定义指向double型函数的指针变量,该函数有一个double型参数
double (*pf)( double );
pf=sqrt; //pf 指向一个平方根函数
时,使用*pf可以调用该函数。
cout<<(*pf)(2.0)<<endl; //输出根号2的值
与 cout<<sqrt(2.0)<<endl; 表示式是等价的
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程学习网的更多内容!
本文标题为:C++的函数与指针
基础教程推荐
- C语言 structural body结构体详解用法 2022-12-06
- C++中的atoi 函数简介 2023-01-05
- C++详细实现完整图书管理功能 2023-04-04
- 如何C++使用模板特化功能 2023-03-05
- C语言基础全局变量与局部变量教程详解 2022-12-31
- C利用语言实现数据结构之队列 2022-11-22
- 一文带你了解C++中的字符替换方法 2023-07-20
- C/C++编程中const的使用详解 2023-03-26
- C++使用easyX库实现三星环绕效果流程详解 2023-06-26
- 详解c# Emit技术 2023-03-25