天天看點

C與C++關于*與&(引用方式傳參,傳值方式傳參)補充:

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

一個例子

C與C++關于*與&(引用方式傳參,傳值方式傳參)補充:

補全該代碼:

用C++:

C與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++關于*與&amp;(引用方式傳參,傳值方式傳參)補充:

其中:

C與C++關于*與&amp;(引用方式傳參,傳值方式傳參)補充:

ptr=&Ref

*ptr是指向這個位址(&Ref)的值

補充:

int x=1;<br>
int *y=&amp;x; //用于指針傳遞,y有自己獨立的記憶體位址,存儲的内容是x的位址,*y是x的值<br>
int &amp;z=x; //用于引用傳遞,可以了解為z就是x,x就是z,隻不過名字不一樣</strong></h3>
           

還不了解看一下:https://www.cnblogs.com/codingmengmeng/p/5865510.html

一個例子

繼續閱讀