三、傳值、傳位址、傳引用的區別
四.哪種更高效?
int a =
10; 定義乙個整型變數a
int*p =
&a; 定義乙個指向整型變數的指標變數p,該指標指向a的儲存單元,即p的值是a儲存單元的位址
int&b = a; 定義乙個整型變數a的引用,a和b是同乙個東西,在記憶體中占用同乙個儲存單元
(1)傳值呼叫;
(2)傳址呼叫(即是傳指標);
(3)傳引用;
引用在定義時必須初始化
乙個變數可以有多個引用
引用一旦繫結某個實體,就不能再是其他變數的引用。
底層的實現方式相同,都是按照指標的方式實現的
這種傳遞方式中,實參和形參是兩個不同的位址空間,引數傳遞的實質是將原函式中變數的值,複製到被呼叫函式形參所在的儲存空間中,這個形參的位址空間在函式執行完畢後,會被**掉。整個被呼叫函式對形參的操作,只影響形參對應的位址空間,不影響原函式中變數的值,因為這兩個不是同乙個儲存空間。
即使形參的值在函式中發生了變化,實參的值也完全不會受到影響,仍為呼叫前的值。
值傳遞時,實參被拷貝了乙份,然後在函式體內使用,函式體內修改引數變數時修改的只是實參的乙份拷貝,而實參本身沒有改變。
這種傳遞方式中,實參是變數的位址,形參是指標型別的變數,在函式中對指標變數的操作,就是對實參(變數位址)所對應的變數的操作,函式呼叫結束後,原函式中的變數的值將會發生改變。
被呼叫函式中對形參指標所指向的位址中內容的任何改變都會影響到實參。
這種傳遞方式中,形參是引用型別變數,其實就是實參的乙個別名,在被呼叫函式中,對引用變數的所有操作等價於對實參的操作。這樣,整個函式執行完畢後,原先的實參的值將會發生改變。
被調函式對形參做的任何操作都影響了主調函式中的實參變數。
在內建型別當中三種傳遞方式的效率上都差不多;
在自定義型別當中,傳引用方式效率的更高效一些,因為它沒有對形參進行一次拷貝
C 傳值 傳址 傳指標 傳引用
相關概念 c 三種傳遞引數方式 傳引數的值 稱值傳遞,簡稱傳值 傳引數的位址 稱位址傳遞,簡稱為傳址 和引用傳遞 稱為傳引用 相應的函式傳值呼叫,傳址呼叫和傳引用呼叫 形參 實參 函式定義時參數列中的引數稱為形式引數,簡稱形參 函式呼叫時參數列中的引數稱為實際引數,簡稱實參。實參和形參之間的資料傳遞...
傳值,傳址和傳引用
傳值方式 將實參的值拷貝給函式或方法,在函式內對形參進行操作,操作的物件是實參的拷貝,對實參本身沒有影響,在函式結束返回後,形參被丟棄釋放,實參的內容不會被改變。c 一條基本原則 在預設情況下,引數只能以值傳遞的方式給函式,被傳遞到函式的只是變數的值,永遠不會是變數本身。void exchange ...
傳值 傳址和傳引用
在編寫個人函式的時候,你將受到c 中一條基本原則的限制 在預設的情況下,引數只能以值傳遞的方式給函式。這句話的理解是 被傳遞到函式的只是變數的值,永遠不會是變數本身。舉例如下 include void changeage int age,int newage 如果想要實現計畫功能,需要怎麼改?mai...