您好,登錄后才能下訂單哦!
這篇“c++指針變量的傳值和傳址方法”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“c++指針變量的傳值和傳址方法”文章吧。
舉個例子:在func
函數退出后,指針pInt
所指的內容*pInt
為 12
#include <stdio.h>
//公眾號:C語言與CPP編程
int func(int* pRes)
{
if(pRes == NULL)
pRes = new int(12);//分配新的內存空間給指針pRes,并賦值
return 0;
}
int main ()
{
int *pInt = NULL;
int val = func(pInt);
printf("%d\n",*pInt); return 0;
}
解析:int func(int* pRes)
函數的形參是指針類型 int *pRes
,在函數體中 new
了一塊內存并賦值 12,將內存地址賦值給指針 pRes
。在main
函數中,定義了指針pInt
,調用func
函數,把pInt
作為參數傳入func
函數中。結果*pInt
并不是 12。
原因:在func
函數調用過程中,形參和實參的傳遞使用了值傳遞
方式,這種情況下,形參變量在函數體內
發生了變化,在函數結束之后,形參變量隨之釋放
,不能把變化的結果返回給實參。
可以使用指針傳遞
或者引用傳遞
。想要在函數體內改變pRes
的值,并把這個變化返回到main
函數中,必須傳遞pRes
的指針。因為pRes
本身就是指針,所以應該傳遞指針的指針
,或者指針的引用
。
int v = 1;
int *p = &v;'
int *&rp = p;
&
說明r
是一個引用。*
確定r
引用的類型是一個指針。
因為引用不是對象,故無引用的數組,無指向引用的指針,無到引用的引用:
int& a[5]; // 錯誤
int&* p; // 錯誤
int& &r; // 錯誤
所以修改函數int func(int* pRes);
為int func(int *&pRes);
#include <stdio.h>
int func(int* &pRes)
{
if(pRes == NULL)
pRes = new int(12);//分配新的內存空間給指針pRes,并賦值
return 0;
}
int main ()
{
int *pInt = NULL;
int val = func(pInt);
printf("%d\n",*pInt);
return 0;
}
傳值:實參拷貝傳遞給形參。就是把實參賦值給形參,賦值完畢后實參就和形參沒有任何聯系,對形參的修改就不會影響到實參。
傳地址:把實參地址的拷貝傳遞給形參。就是把實參的地址復制給形參。復制完畢后實參的地址和形參的地址沒有任何聯系,對實參形參地址的修改不會影響到實參, 但是對形參地址所指向對象的修改卻直接反應在實參中,因為形參指向的對象就是形參的對象
。
傳引用:本質沒有任何實參的拷貝,兩個變量指向同一個對象。這是對形參的修改,必然反映到實參上。
以上就是關于“c++指針變量的傳值和傳址方法”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。