版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協定,轉載請附上原文出處連結和本聲明。 本文連結: https://blog.csdn.net/qq_34243930/article/details/81638852
一個例子

補全該代碼:
用C++:
C與C++關于*與&(引用方式傳參,傳值方式傳參)補充:
用C:是把位址傳進去,然後用*運算取位址的内容
、
1、引用方式傳參,引用相當于是外部變量的别名,實際操作的就是該變量,即在函數内對該變量進行修改的話,在外部該變量也會相應被修改。
2、傳值方式傳參,實際上是複制了一個外部變量的副本進入函數中,在函數内操作的為該副本,對該變量的修改并不會實際修改函數外的該變量。
3、注意,此處未考慮傳入的參數為指針的情況,如果傳值方式傳入的是指針,那麼如果單純修改指針,那麼在跳出函數後,該指針指向不受影響,但是如果修改的是指針指向的值,那麼外部指針所指向的内容也是相應修改了的。因為以指針為參數進行傳值,也是在函數内部複制了一個指針的副本,因而在内部修改指針本身即修改其副本并不影響外部的指針,但是兩個指針都是指向同一個記憶體空間的,因而如果在函數内部修改了指針指向的内容,外部指針指向的内容也就相應改變了。
//是以! 引用方式傳參 &p裡修改p 等價于 傳值方式(傳入的是指針)傳參*p裡修改指針指向的值 *p
#include <iostream>
using namespace std;
//測試如果引用進入函數後進行修改,跳出函數後變量是否修改;
void ChangeRef(int& ref){
ref++;
cout << "引用内修改後的值為:" << ref << endl;
}
//測試以傳值方式進入函數進行修改,跳出函數後變量是否修改
void ChangeNotRef(int ref){
ref++;
cout << "通過傳值方式在函數内修改後的值為:" << ref << endl;
}
//測試以指針為參數傳入函數,修改指針指向,是否影響外部指針指向
void ChangePtr(int* ptr){
ptr++;
cout << "函數内修改後的指針指向:" << ptr << endl;
}
//測試在函數中修改指針指向的内容,是否影響外部指針指向内容
void ChangePtrVal(int* ptr){
(*ptr)++;
cout << "函數内修改後指針指向的值:" << *ptr << endl;
}
int main(){
int Ref = 0;
cout << "傳入引用之前的值為:" << Ref << endl;
ChangeRef(Ref);
cout << "在函數内修改引用後,跳出函數的值為:" << Ref << endl<<endl;
ChangeNotRef(Ref);
cout << "通過傳值方式在函數内修改後,跳出函數的值為:" << Ref << endl<<endl;
int* ptr = &Ref;
cout << "傳入函數前的指針指向:" << ptr << endl;
ChangePtr(ptr);
cout << "傳值方式傳入函數跳出後的指針指向:" << ptr << endl<<endl;
cout << "傳入前指針指向的值為:" << *ptr << endl;
ChangePtrVal(ptr);
cout << "從函數中出來後指針指向的值為:" << *ptr << endl<<endl;
}
其中:
C與C++關于*與&(引用方式傳參,傳值方式傳參)補充:
ptr=&Ref
*ptr是指向這個位址(&Ref)的值
補充:
int x=1;<br>
int *y=&x; //用于指針傳遞,y有自己獨立的記憶體位址,存儲的内容是x的位址,*y是x的值<br>
int &z=x; //用于引用傳遞,可以了解為z就是x,x就是z,隻不過名字不一樣</strong></h3>
還不了解看一下:https://www.cnblogs.com/codingmengmeng/p/5865510.html