程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++中的值傳遞,引用傳遞及指針傳遞

C++中的值傳遞,引用傳遞及指針傳遞

編輯:關於C++

C++的值傳遞,引用傳遞,指針傳遞這些概念一直是困擾C++程序員,我一直也沒有一個能說清他們之間的關系通過一個簡單的實例,或者說淺顯的說法,找了一些相關資料,和自已的個人感受,簡單介紹一下。

c++中傳遞參數的方式有三種:傳參數的值(稱為值傳遞,簡稱傳值),傳參數的地址(稱為地址傳遞,簡稱為傳址),和引用傳遞(簡稱為傳引用),相應的函數也就是傳值調用,傳址調用和傳引用調用

函數定義時參數表中的參數稱為形式參數,簡稱形參,函數調用時參數表中的參數稱為實際參數,簡稱實參,實參和形參之間的數據傳遞稱為形實結合,通常情況下c++語言是傳值調用,傳值調用是單向的,即參數的值只能由實參傳遞給形參,而不能反過來由形參傳遞給值參,也就是說,從被調用函數的角度來看,參數的值只能傳入不能傳出。傳值調用時實參可以是具體的數值、已經有值的變量和可求值的表達式,由於數值和變量都是表達市的一種,因此,傳值調用時實參本質上是表達式。當函數被調用時,系統首先對實參表達式球值,然後將值傳遞給形參,換過一種思路,傳值調用時,形參實際上是實參的一份拷貝,所以傳遞時不會改變外部變量實參的值,

假設聲明一個變量int n=1;那麼他在內存中的存儲,我們可以這樣來理解,第一:內存中1是指變量n的值,存儲這個值的地址我們把他稱為1的內存地址,也就是指針地址,n是他的名字,或者我們把他叫做1的大名,另外我們可以給他起一個別的名字,叫做小名,也叫別名,因為大名和小別都是指向同一個值,所以改變大名的值也就是改名小名的值,小名是大名的一種引用,理清了上面這些含義,我們就來舉個例子.

int m;

int &n=m;

n是m的引用reference,m是被引用物referent。n相當於m的別名,

引用的一些規則如下:

(1)引用被創建的同時必須被初始化(指針則可以在任何時候被初始化)。

(2)不能有NULL引用,引用必須與合法的存儲單元關聯(指針則可以是NULL)。

(3)一旦引用被初始化,就不能改變引用的關系(指針則可以隨時改變所指的對象)。

引用的主要功能是傳遞函數的參數和返回值。

C++語言中,函數的參數和返回值的傳遞方式有三種:值傳遞、指針傳遞和引用傳遞.

以下是“值傳遞”的示例程序。

由於Func1函數體內的x是外部變量n的一份拷貝,改變x的值不會影響n,所以n的值仍然是0。

#include <iostream>

using namespace std;

func(int x);

void main(){

int n=0;

func(n);

cout<<n<<endl;

}

func(int x){

x = x + 10;

}

以下是“指針傳遞”的示例程序。

由於Func2函數體內的x是指向外部變量n的指針,改變該指針的內容將導致n的值改變,所以n的值成為10。

#include <iostream>

using namespace std;

func(int *x);

void main(){

int n=0;

func(&n);

cout<<n<<endl;

}

func(int *x){

*x = *x + 10;

}

以下是“引用傳遞”的示例程序。

由於Func3函數體內的x是外部變量n的引用,x和n是同一個東西,改變x等於改變n,所以n的值成為10。

#include <iostream>

using namespace std;

func(int &x);

void main(){

int n=0;

func(n);

cout<<n<<endl;

}

func(int &x){

x = x + 10;

}

本文出自 “驿落黃昏” 博客,請務必保留此出處http://yiluohuanghun.blog.51cto.com/3407300/1163446

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved