十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇“c++指針變量的傳值和傳址方法”文章的知識點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“c++指針變量的傳值和傳址方法”文章吧。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名申請、虛擬主機(jī)、營銷軟件、網(wǎng)站建設(shè)、棲霞網(wǎng)站維護(hù)、網(wǎng)站推廣。
舉個例子:在func函數(shù)退出后,指針pInt所指的內(nèi)容*pInt為 12
#include
//公眾號:C語言與CPP編程
int func(int* pRes)
{
if(pRes == NULL)
pRes = new int(12);//分配新的內(nèi)存空間給指針pRes,并賦值
return 0;
}
int main ()
{
int *pInt = NULL;
int val = func(pInt);
printf("%d\n",*pInt); return 0;
}
解析:int func(int* pRes)函數(shù)的形參是指針類型 int *pRes,在函數(shù)體中 new了一塊內(nèi)存并賦值 12,將內(nèi)存地址賦值給指針 pRes。在main函數(shù)中,定義了指針pInt,調(diào)用func函數(shù),把pInt作為參數(shù)傳入func函數(shù)中。結(jié)果*pInt并不是 12。
原因:在func函數(shù)調(diào)用過程中,形參和實(shí)參的傳遞使用了值傳遞方式,這種情況下,形參變量在函數(shù)體內(nèi)發(fā)生了變化,在函數(shù)結(jié)束之后,形參變量隨之釋放,不能把變化的結(jié)果返回給實(shí)參。
可以使用指針傳遞或者引用傳遞。想要在函數(shù)體內(nèi)改變pRes的值,并把這個變化返回到main函數(shù)中,必須傳遞pRes的指針。因?yàn)?code>pRes本身就是指針,所以應(yīng)該傳遞指針的指針,或者指針的引用。
int v = 1;
int *p = &v;'
int *&rp = p;
&說明r是一個引用。*確定r引用的類型是一個指針。
因?yàn)橐貌皇菍ο螅薀o引用的數(shù)組,無指向引用的指針,無到引用的引用:
int& a[5]; // 錯誤
int&* p; // 錯誤
int& &r; // 錯誤
所以修改函數(shù)int func(int* pRes);為int func(int *&pRes);
#include
int func(int* &pRes)
{
if(pRes == NULL)
pRes = new int(12);//分配新的內(nèi)存空間給指針pRes,并賦值
return 0;
}
int main ()
{
int *pInt = NULL;
int val = func(pInt);
printf("%d\n",*pInt);
return 0;
}
傳值:實(shí)參拷貝傳遞給形參。就是把實(shí)參賦值給形參,賦值完畢后實(shí)參就和形參沒有任何聯(lián)系,對形參的修改就不會影響到實(shí)參。
傳地址:把實(shí)參地址的拷貝傳遞給形參。就是把實(shí)參的地址復(fù)制給形參。復(fù)制完畢后實(shí)參的地址和形參的地址沒有任何聯(lián)系,對實(shí)參形參地址的修改不會影響到實(shí)參, 但是對形參地址所指向?qū)ο蟮男薷膮s直接反應(yīng)在實(shí)參中,因?yàn)樾螀⒅赶虻膶ο缶褪切螀⒌膶ο?/code>。
傳引用:本質(zhì)沒有任何實(shí)參的拷貝,兩個變量指向同一個對象。這是對形參的修改,必然反映到實(shí)參上。
以上就是關(guān)于“c++指針變量的傳值和傳址方法”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。