91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

c++指針變量的傳值和傳址方法

發布時間:2022-03-17 10:41:00 來源:億速云 閱讀:364 作者:iii 欄目:大數據

這篇“c++指針變量的傳值和傳址方法”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“c++指針變量的傳值和傳址方法”文章吧。

1 引言

舉個例子:在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;
}
   

2 傳值、傳引用區別和聯系

傳值:實參拷貝傳遞給形參。就是把實參賦值給形參,賦值完畢后實參就和形參沒有任何聯系,對形參的修改就不會影響到實參。

傳地址:把實參地址的拷貝傳遞給形參。就是把實參的地址復制給形參。復制完畢后實參的地址和形參的地址沒有任何聯系,對實參形參地址的修改不會影響到實參, 但是對形參地址所指向對象的修改卻直接反應在實參中,因為形參指向的對象就是形參的對象

傳引用:本質沒有任何實參的拷貝,兩個變量指向同一個對象。這是對形參的修改,必然反映到實參上。

  • 無論傳值還是傳指針,函數都會生成一個臨時變量,但傳引用時,不會生成臨時變量,
  • 傳值時,只可以引用值而不可以改變值,但傳值引用時,可以改變值,
  • 傳指針時,只可以改變指針所指的內容,不可以改變指針本身,但傳指針引用時,既可以改變指針所指的內容,又可以改變指針本身,
  • 引用傳遞函數的參數,在內存中并沒有產生實參的副本,它是直接對實參操作;而使用一般變量傳遞函數的參數,當發生函數調用時,需要給形參分配存儲單元,形參變量是實參變量的副本;如果傳遞的是對象,還將調用拷貝構造函數。因此,當參數傳遞的數據較大時,用引用比用一般變量傳遞參數的效率和所占空間都好。

以上就是關于“c++指針變量的傳值和傳址方法”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

平山县| 和田市| 巴楚县| 南京市| 仙居县| 武安市| 壶关县| 柞水县| 封开县| 鸡泽县| 全南县| 板桥市| 金湖县| 桑日县| 门头沟区| 铁岭市| 若尔盖县| 天台县| 田东县| 淳化县| 辛集市| 茌平县| 铁力市| 锡林郭勒盟| 古田县| 建宁县| 郎溪县| 乌审旗| 黄大仙区| 通化县| 武山县| 霍林郭勒市| 饶河县| 松原市| 台湾省| 广汉市| 平原县| 柯坪县| 灵山县| 健康| 湖北省|