C++函數(shù)三種傳參形式(指針傳遞、引用傳遞、值傳遞)
前言
不論是哪種參數(shù)傳遞方式,都有形參和實參之分,都會在調(diào)用函數(shù)時進行一次復制,將實參的值賦予形參。對于值傳遞,實參形參概念較好區(qū)分,但對于地址傳遞,形參實參指向的地址相同,可能會產(chǎn)生操作的是同一變量的想法,實則不然。(這也是理解二級指針作用的核心知識點)
指針傳遞
變量形式、函數(shù)原型及對應傳參形式:
- 變量:int a = 0; int *b = 0;
- 函數(shù)原型:void func(int *arg);
- 傳參形式:func(&a); func(b);
解釋:
函數(shù)得參數(shù)類型是int指針類型,接受的參數(shù)的一個地址。因此,對于普通變量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; }
引用傳遞
最復雜的是引用傳遞。此次只講解最基礎(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ù)原型及對應傳參形式:
- 變量:int a = 0; int *b = 0;
- 函數(shù)原型:void func(int arg);
- 傳參形式:func(a); func(*b);
解釋:
函數(shù)的參數(shù)類型是int類型,接收的值是int型變量的值。因此,對于變量a,本身就是int型變量,故直接傳入。對于指針變量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; }
總結(jié):
1.引用傳遞和值傳遞都是傳地址,可理解為實參和形參的內(nèi)存地址相同,在函數(shù)中的賦值操作在函數(shù)結(jié)束后仍會保留(只要被賦值的變量仍存在)。而值傳遞傳入的是實參的值,調(diào)用函數(shù)時會進行拷貝操作將實參的值賦予形參,實參和形參的地址不同,因此在函數(shù)體內(nèi)對形參的賦值操作不會改變實參的值。
到此這篇關(guān)于C++函數(shù)三種傳參形式(指針傳遞、引用傳遞、值傳遞)的文章就介紹到這了,更多相關(guān)C++函數(shù)傳參內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++基于Boost.Asio實現(xiàn)端口映射器的過程詳解
Boost.Asio 是一個功能強大的 C++ 庫,用于異步編程和網(wǎng)絡(luò)編程,它提供了跨平臺的異步 I/O 操作,在這篇文章中,我們將深入分析一個使用 Boost.Asio 實現(xiàn)的簡單端口映射服務(wù)器,文中有詳細的代碼講解,需要的朋友可以參考下2023-11-11C++11 <future>中std::promise 介紹
這篇文章主要介紹了C++11 <future>中std::promise 介紹,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-02-02C++通過ofstream和ifstream實現(xiàn)文件讀寫
本文詳細介紹了C++中通過ofstream和ifstream進行文件的讀寫操作,包括文件打開模式的選擇、錯誤處理策略以及二進制文件的特殊處理,重點講解了如何使用這些類進行文本和二進制文件的讀寫,并強調(diào)了正確處理文件操作中可能出現(xiàn)的錯誤,需要的朋友可以參考下2025-03-03