1. 程式人生 > >C語言引用&的個人理解

C語言引用&的個人理解

因為我學藝不精,所以有時候交換值函式時有時候會寫成下面這樣
int main(int argc, const char * argv[]) {
    // insert code here...
    
    int x = 3;
    int y = 5;
    Swap(&x,&y);
    cout<<x<<endl;
    cout<<y<<endl;
    
    return 0;
}

void Swap(int *a,int *b){
    int *temp;
    temp = a;
    a = b;
    b = temp;
}
很明顯,這樣的結果肯定是錯的,因為a和b只是形參,交換兩個地址對主函式的x和y並沒有什麼作用,甚至連x和y的地址都不會改變。如果一定要用指標作為引數,可以像下面這樣,交換a和b指向的值,可是這樣和不用指標也沒啥區別了。
void Swap(int *a,int *b){
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}
而C++裡面有個概念叫引用變數,也就是為原變數起一個別名,使用情況像下面這樣
int main(int argc, const char * argv[]) {
    // insert code here...
    
    int x = 3;
    int y = 5;
    swap(x, y);
    cout<<x<<endl;
    cout<<y<<endl;
    
    return 0;
}


void swap(int &x,int &y){
    int temp;
    temp = x;
    x = y;
    y = temp;
}

這樣就能夠成功交換x和y的值。

為什麼會有不同的效果呢,按照我個人的理解是,上面的區域性變數a和b只是相當於新建一個指向x和y的指標,只是交換a和b指標地址的值並不能改變x和y的地址的指向,所以x和y的值還是沒有改變。

而採用引用的話,實際上就是建立一個指標指向主題函式中的x和y,然後在操作的就是這個指標指向的值。這樣才能改變主體函式中x和y的值。

以上僅僅是個人的理解,方便自己理解程式碼,也有可能實際並不是我想的這樣,僅供參考!

相關推薦

C語言引用&的個人理解

因為我學藝不精,所以有時候交換值函式時有時候會寫成下面這樣int main(int argc, const char * argv[]) { // insert code here... int x = 3; int y = 5;

Objective-C是動態執行時語言個人理解

      以前開發時沒有特別注意這些細節問題,今天突然被問到,一下子懵圈了,經過一番查詢和比較,再加上小編的理解終於是瞭解的差不多了,現在分享給大家! 1、什麼是動態語言? 動態語言,是指程式在執行

linux信號解釋(4)--C語言下的理解

linux信號 C語言下linux信號理解 上一節中中簡單介紹了信號的處理機制,就是調用函數庫來實現信號的處理,因此,在這節中,介紹在C語言下如何理解信號的處理機制。 創建一個文件signal.c,文件內容如下:(對於學過一下C語言的童鞋來說是不是很熟悉呢) #include<signal.h&

C語言引用不同路徑下的標頭檔案的方法

C語言學習筆記,備查:   希望在一個A.c檔案中引用另一個B.c檔案的方法,可以將B.c檔案中的方法提取至B.h標頭檔案,然後在B.c和A.c中分別用#include "XXX/B.h"引用。其中XXX/B.h可以是絕對路徑也可以是相對路徑。 舉例: FindPrime.c檔案中,有個is

c語言記憶體的理解

      首先如圖記憶體分四區  棧區(stack)—由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。 堆區(heap)—一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時

[原始碼和文件分享]基於C語言個人簡歷錄入程式

一 需求分析 此個人簡歷錄入程式可實現相關資訊的新增、刪除、修改。 通過文字框錄入姓名,通過單選按鈕選擇性別,通過組合框選擇專業(計算機,電子,工商等)和文化程度(大專,本科,碩士,博士等),設定“提交”與“取消”兩個按鍵,當用滑鼠點選“提交”按鍵時,在文字框中顯示所填寫以及選擇的資

C語言計算個人所得稅問題程式碼及解析

問題描述 編寫一個計算個人所得稅的程式,要求輸入收入金額後,能夠輸出應繳的個人所得稅。 個人所得稅徵收辦法如下: ◎ 起徵點為3500元; ◎ 不超過1500元的部分,徵收3%; ◎ 超過1500〜4500元的部分,徵收10%; ◎ 超過4500〜9000元的部分,徵收20%; ◎

學習筆記:對C語言指標的理解

在C語言中,有很多極易混淆的概念(比如:記憶體和指標、函式指標、指標函式、陣列指標、指標陣列),也正是這些概念使得很多人學習起來很累,今天,筆者分享一下自己對這些的概念的理解。 一、定義 1、記憶體:隨機存取儲存器,也叫主存,是與CPU直接交換資料的內部儲存器。 2、指

關於學習c語言個人感想

第一次寫部落格,也不知道應該寫些什麼。就簡單說一下自己現在的一些事情和想法。身為大二計算機專業的學生,雖然學習了C語言和一些課程,但是對於程式設計我還是很不擅長,依然是剛剛接觸程式設計的小白一枚。當時填報專業的時候,其實我並不是很清楚計算機專業到底是學些什麼,只是身邊的同學什

C語言之最好理解的通過函式指標作為引數實現回撥函式

1、函式指標回撥解釋 回撥函式就是一個通過函式指標呼叫的函式。如果你把函式的指標(地址)作為引數傳遞給另一個函式,當這個指標被用來呼叫其所指向的函式時,我們就說這是回撥函式 2、程式碼實現 #i

C語言指標的理解

        對於C語言初學者而言,指標部分有點複雜,也有些難理解,可以說是C語言學習之路上的第一道坎,在閱讀了不少書籍資料和實驗後,決定寫下這篇部落格,供大家參考。        什麼是指標?  指標也是一種變數,存放的是某塊記憶體的地址。 我們知道,記憶體可以理解

C語言-const再理解(轉)

box 多少 關鍵字 type 報錯 func 出現 不能 ack 有時候我們希望定義這樣一種變量,它的值不能被改變,在整個作用域中都保持固定。例如,用一個變量來表示班級的最大人數,或者表示緩沖區的大小。為了滿足這一要求,可以使用const關鍵字對變量加以限定: con

【好程式設計師筆記分享】—— C語言指標的理解

對於C語言中指標是非常重要的內容,也是C語言的魅力所在。下面我們來看一段程式碼理解指標: #include <stdio.h> int main(int argc, const char * argv[]) { //定義int型別的變數a

c語言緩衝區的理解

開始深入地瞭解一下c語言,發現以前對於緩衝區的理解並不清楚,在這裡對此作一些深入的瞭解,後續關於緩衝區的問題也在本篇部落格上進行更新。 備註:本篇部落格的內容建立在剛閱讀的c語言中文網相關內容,網址如下:http://c.biancheng.net/cpp/h

C語言版)連結串列(一)——實現單向連結串列建立、插入、刪除等簡單操作(包含個人理解說明及註釋,新手跟著寫程式碼)

我學習了幾天資料結構,今天下午自己寫了一個單向連結串列的程式。我也是新手,所以剛開始學習資料結構的菜鳥們(有大牛們能屈尊看一看,也是我的榮幸)可以和我一起共同學習、討論,當然也很高興能指出我的錯誤,因為這是我們一起成長的過程。本程式碼包含我在寫程式時的一些個人理解的說

C語言的連結屬性的個人理解

C語言有3個連結屬性:extern(外部)、intern(內部)、none(無)。 屬於extern的識別符號無論宣告幾次,都表示幾個原始檔中或整個專案中同一個實體。 屬於intern的識別符號在一個原始檔中的多個宣告都表示同一個實體。 屬於none的識別符號有幾個宣告就有

c語言中對字段寬度的理解

style lib include creat span 演示 file code pre 1 /************************************************************************* 2 >

C語言 Include指令(引用頭文件)

clas fff const con ack style span pan har #include "one.h" #include "two.h" int main(int argc, const char * argv[]) { one(

c語言中指針和多維數組的理解

分享 方式 方括號 mage 維數 jpg 聲明 col 多維數組 1.復習指針和數組之間的特殊關系:不帶方括號的數組名是一個指針,指向該數組的第一個元素。 2.多維數組: int multi[2][4];//聲明一個二維數組作為舉例 a.理解方式1:可以將數組看成行

c語言函數指針的理解與使用

tdi 是不是 使用 模塊 html c語言函數 討論 編譯器 麻煩 轉載:http://www.cnblogs.com/haore147/p/3647262.html 1.函數指針的定義   顧名思義,函數指針就是函數的指針。它是一個指針,指向一個函數。看例子: A) c