C++的函數(shù)與指針
函數(shù)與指針
一個函數(shù)在編譯時被分配一個入口地址,這個入口地址就稱為函數(shù)的指針。在C++中, 函數(shù)名代表函數(shù)的入口地址。
- 指針作函數(shù)的參數(shù)-實現(xiàn)地址傳遞
- 返回指針的函數(shù)
- 利用指向函數(shù)的指針調(diào)用函數(shù)
指針作函數(shù)的參數(shù)-實現(xiàn)地址傳遞
指針作函數(shù)的參數(shù),具有以下用途:
- 指針作函數(shù)參數(shù),這時形參接受的是實參的地址。函數(shù)中通過對指針的間接訪問實現(xiàn)參數(shù)的按“引用傳遞”功能
- 設(shè)置多個指針參數(shù)可從函數(shù)中帶回多個結(jié)果值
- 對于傳遞一塊連續(xù)的內(nèi)存區(qū)域數(shù)據(jù),傳遞首地址比傳遞數(shù)
據(jù)值不僅開銷小而且效率高
例如:
編寫交換兩個變量值的函數(shù)(地址傳遞)
相當(dāng)于改變兩個指針指向的變量內(nèi)容。
void swap(int *px, *py)
{
int t;
t = *px;
*px = *py;
*py = t;
}
int main()
{
int x=2, y=3;
cout<<"調(diào)用前:x="<<x<<",y="<<y<<endl;
swap(&x, &y);
cout<<"調(diào)用后:x="<<x<<",y="<<y<<endl;
return 0;
}
/*
輸出:
調(diào)用前:x=2, y=3
調(diào)用后:x=3, y=2
*/

例如:
利用指針參數(shù)帶回函數(shù)中的多個值
計算一維數(shù)組元素的平均值,并能帶回數(shù)組中的最大值與最小值
函數(shù)原型設(shè)計如下:
double faver(int s[], int n, int *max, int *min);
其中:
s-一維數(shù)組
n-數(shù)組中元素個數(shù)
max-指向最大值
min-指向最小值
將平均值作為函數(shù)的返回值
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); //調(diào)用函數(shù)
cout<<"max="<<max<<"\n"<<"min="<<min<<endl;
cout<<"aver="<<aver<<endl;
return 0;
}
/*
max=98
min=67
aver=82
*/
返回指針的函數(shù)
返回指針的函數(shù)定義格式如下:
類型 * 函數(shù)名(形式參數(shù)表)
{
語句序列
}
其中:
類型 * 為函數(shù)的返回值類型,是一個指針類型
例子
編寫函數(shù),返回字符串中首次出現(xiàn)的非空格字符開始的字符串
如:" 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;
}
指向函數(shù)的指針變量
使用指向函數(shù)的指針變量可以存放函數(shù)的指針
指向函數(shù)的指針變量定義格式如下:
函數(shù)返回值類型 ( * 指針變量名 ) (形參類型表列);
注意,中間的括號不能省略
例如:
定義指向double型函數(shù)的指針變量,該函數(shù)有一個double型參數(shù)
double (*pf)( double ); pf=sqrt; //pf 指向一個平方根函數(shù)
時,使用*pf可以調(diào)用該函數(shù)。
cout<<(*pf)(2.0)<<endl; //輸出根號2的值 與 cout<<sqrt(2.0)<<endl; 表示式是等價的
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
C語言左旋轉(zhuǎn)字符串與翻轉(zhuǎn)字符串中單詞順序的方法
這篇文章主要介紹了C語言左旋轉(zhuǎn)字符串與翻轉(zhuǎn)字符串中單詞順序的方法,給出了相關(guān)的兩道算法題目作為例子,需要的朋友可以參考下2016-02-02
C++ 實現(xiàn)一個復(fù)數(shù)類的實例代碼
這篇文章主要介紹了C++ 實現(xiàn)一個復(fù)數(shù)類的實例代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04
C++?std::chrono庫使用示例(實現(xiàn)C++?獲取日期,時間戳,計時等功能)
std::chrono是C++標(biāo)準(zhǔn)庫中的一個組件,用于表示和處理時間,這篇文章主要介紹了C++?std::chrono庫使用指南(實現(xiàn)C++?獲取日期,時間戳,計時等功能),需要的朋友可以參考下2023-06-06
C語言實現(xiàn)學(xué)生個人消費(fèi)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語言學(xué)生個人消費(fèi)管理系統(tǒng)開發(fā),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-08-08
關(guān)于Qt?C++中connect的幾種寫法代碼示例
這篇文章介紹了Qt中connect函數(shù)的不同編寫方式,包括傳統(tǒng)的槽函數(shù)寫法、使用函數(shù)指針的寫法、Lambda表達(dá)式以及使用QOverload選擇重載信號的寫法,每種寫法都有其特點(diǎn)和適用場景,程序員應(yīng)根據(jù)具體需求選擇最合適的方式,需要的朋友可以參考下2024-11-11

