C++函數(shù)三種傳參形式(指針傳遞、引用傳遞、值傳遞)
前言
不論是哪種參數(shù)傳遞方式,都有形參和實(shí)參之分,都會(huì)在調(diào)用函數(shù)時(shí)進(jìn)行一次復(fù)制,將實(shí)參的值賦予形參。對于值傳遞,實(shí)參形參概念較好區(qū)分,但對于地址傳遞,形參實(shí)參指向的地址相同,可能會(huì)產(chǎn)生操作的是同一變量的想法,實(shí)則不然。(這也是理解二級指針作用的核心知識(shí)點(diǎn))
指針傳遞
變量形式、函數(shù)原型及對應(yīng)傳參形式:
- 變量:int a = 0; int *b = 0;
- 函數(shù)原型:void func(int *arg);
- 傳參形式:func(&a); func(b);
解釋:
函數(shù)得參數(shù)類型是int指針類型,接受的參數(shù)的一個(gè)地址。因此,對于普通變量a,需要先用&符號取地址后傳入,故傳入&a。對于指針b,指針就是地址,因此直接傳入b即可。
#include <iostream>
using namespace std;
void exchange(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int x, y;
cin >> x >> y;
exchange(&x, &y);
cout << x << y;
}引用傳遞
最復(fù)雜的是引用傳遞。此次只講解最基礎(chǔ)簡單的使用。
變量形式、函數(shù)原型及對于傳參形式:
- 變量:int a = 0; int *b = 0;
- 函數(shù)原型:void func(int &arg);
- 傳參形式:func(a); func(b);func(*b)
解釋:
函數(shù)的參數(shù)類型是引用類型。對于變量a,直接傳入a。對于指針b,可以選擇傳入地址b或者傳入b指向的值*b。
區(qū)別:待定
引用的本質(zhì):待定
#include <iostream>
using namespace std;
void exchange(int &a, int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
int main()
{
int x, y;
cin >> x >> y;
exchange(x, y);
cout << x << " " << y;
}值傳遞
變量形式、函數(shù)原型及對應(yīng)傳參形式:
- 變量:int a = 0; int *b = 0;
- 函數(shù)原型:void func(int arg);
- 傳參形式:func(a); func(*b);
解釋:
函數(shù)的參數(shù)類型是int類型,接收的值是int型變量的值。因此,對于變量a,本身就是int型變量,故直接傳入。對于指針變量b,是需要用*符號進(jìn)行解引用獲取指針指向的值,故傳入*b。
#include <iostream>
using namespace std;
void exchange(int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
}
int main()
{
int x, y;
cin >> x >> y;
exchange(x, y);
cout << x << " " << y;
}總結(jié):
1.引用傳遞和值傳遞都是傳地址,可理解為實(shí)參和形參的內(nèi)存地址相同,在函數(shù)中的賦值操作在函數(shù)結(jié)束后仍會(huì)保留(只要被賦值的變量仍存在)。而值傳遞傳入的是實(shí)參的值,調(diào)用函數(shù)時(shí)會(huì)進(jìn)行拷貝操作將實(shí)參的值賦予形參,實(shí)參和形參的地址不同,因此在函數(shù)體內(nèi)對形參的賦值操作不會(huì)改變實(shí)參的值。
到此這篇關(guān)于C++函數(shù)三種傳參形式(指針傳遞、引用傳遞、值傳遞)的文章就介紹到這了,更多相關(guān)C++函數(shù)傳參內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
VC中使用ADO開發(fā)數(shù)據(jù)庫應(yīng)用程序簡明教程
這篇文章主要介紹了VC中使用ADO開發(fā)數(shù)據(jù)庫應(yīng)用程序的方法,結(jié)合實(shí)例形式詳細(xì)講述了ADO的原理及VC使用ADO開發(fā)數(shù)據(jù)庫應(yīng)用程序的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06
C++?折疊參數(shù)包詳解(悄然增強(qiáng)編程效率)
折疊參數(shù)就是一個(gè)參數(shù)包, 代表是多個(gè)未知,tuple元組就是一個(gè)折疊參數(shù)的使用,這篇文章主要介紹了C++?折疊參數(shù)包悄然增強(qiáng)編程效率,需要的朋友可以參考下2023-05-05
C/C++ Qt 自定義Dialog對話框組件應(yīng)用案例詳解
有時(shí)候我們需要一次性修改多個(gè)數(shù)據(jù),使用默認(rèn)的模態(tài)對話框似乎不太夠用,此時(shí)我們需要自己創(chuàng)建一個(gè)自定義對話框。這篇文章主要介紹了Qt自定義Dialog對話框組件的應(yīng)用,感興趣的同學(xué)可以學(xué)習(xí)一下2021-11-11
Mac OS上搭建Apache+PHP+MySQL開發(fā)環(huán)境的詳細(xì)教程
這篇文章主要介紹了Mac OS上搭建Apache+PHP+MySQL開發(fā)環(huán)境的詳細(xì)教程,包括常見的PHP連接MySQL失敗問題的解決辦法,需要的朋友可以參考下2016-01-01

