C 中傳值,傳指標,傳引用的區別

2022-09-12 00:12:19 字數 1145 閱讀 2917

**自:

當呼叫函式時,傳遞的引數有傳值、傳指標、傳引用這三種形式。

直接傳值是直接開闢了乙個跟主函式實參一樣的空間(位址不一樣),裡面存放了了跟實參一樣大小的值,就相當於數值大小相同但是位置不同。你在這個呼叫函式裡使用這個一樣大小的值,完全不影響主函式實參的值。就好比主函式的空間就是一棟樓,裡面的乙個房間裡放著一些東西(相當於實參變數值)。現在我呼叫了乙個函式,就相當於我在另一棟樓的另乙個房間裡面,把剛才第乙個放東西的房間裡面存的東西完全複製過來,所以你操作現在這個房間裡面的東西,完全不影響原來的房間的東西呀。

傳指標就不一樣了。指標就是位址,我們要去找乙個房間裡面的東西,那麼你得先找到門牌號,才能對照著門牌號去找到房間,從而找到你想要的東西,這就是指標的使用原理。傳指標就是把實參的位址傳過去了,而不是像剛才傳值一樣,直接開闢乙個新的空間去複製數值,而是開闢了乙個新的空間把實參的位址複製了過去。主函式的空間就是一棟樓,裡面的乙個房間放著一些東西(相當於實參變數值),這個房間有個門牌號(也就是實參的位址)。現在呼叫函式,就好比我把他家的門牌號(實參的指標)給你,跟你說你按照這個門牌號去找這個房間,然後再去找裡面的東西。這樣一來,你根據門牌號找到了原來的房間,一旦修改房間裡面的東西,就一定會產生改變。所以根據指標修改指向的變數時,如果呼叫函式進行了修改,主函式的變數也就被修改了。

傳引用就是傳指標的公升級版。引用可以看成變數的別稱,就好像tony老師的本名就叫趙鐵柱一樣,名字不一樣但是人就是那乙個人。所以你傳引用的時候,修改了呼叫函式裡的傳遞引數值,主函式的對應變數也會隨之改變。但是原理還是傳遞指標,也就是位址。傳引用的時候實際上是拷貝了實參的位址,然後你在呼叫函式裡的操作表面上看是對變數的直接賦值,實際上是通過找到位址再改變變數的,這是一種間接定址。但是為啥不直接用指標找位址再操作呢?而是封裝成引用的外表了,很大的原因是安全。因為直接指標操作,那你很可能改變了指標,然後就找不到原來的位址了。就好比,我現在要去找房間(呼叫了其他函式要去訪問主函式的實參變數值),然後給了你一塊門牌號(相當於指標,也就是位址),萬一你一不小心掉溝裡了,門牌號弄丟了(指標被錯誤的修改),那你就找不到原來的房子了呀,你要是還繼續去找錯誤的房子,把別人家房子裡面的東西改了,等下直接程式就出錯了(走錯家門很危險的…)。所以別人就是怕你亂改,直接就給你封裝好了。引用其實還可以讓**更加簡潔清晰,一目了然(因為就相當於同乙個變數在操作的感覺)。c語言是沒有傳引用的,c++把它加上了。原因我覺得是更方便了,也更安全了。

C 的傳值 傳引用 傳指標的區別

參考文章 相同點 都是位址的概念 指標指向一塊記憶體,它的內容是所指記憶體的位址 而引用則是某塊記憶體的別名。不同點 指標是乙個實體,而引用僅是個別名 引用只能在定義時被初始化一次,之後不可變 指標可變 引用 從一而終 指標可以 見異思遷 引用沒有const,指標有const,const的指標不可變...

傳值 傳引用 傳指標

收藏 相關概念 c 三種傳遞引數方式 傳引數的值 稱值傳遞,簡稱傳值 傳引數的位址 稱位址傳遞,簡稱為傳址 和引用傳遞 稱為傳引用 相應的函式傳值呼叫,傳址呼叫和傳引用呼叫 形參 實參 函式定義時參數列中的引數稱為形式引數,簡稱形參 函式呼叫時參數列中的引數稱為實際引數,簡稱實參。實參和形參之間的資...

傳值 傳引用 傳指標

相關概念 c 三種傳遞引數方式 傳引數的值 稱值傳遞,簡稱傳值 傳引數的位址 稱位址傳遞,簡稱為傳址 和引用傳遞 稱為傳引用 相應的函式傳值呼叫,傳址呼叫和傳引用呼叫 形參 實參 函式定義時參數列中的引數稱為形式引數,簡稱形參 函式呼叫時參數列中的引數稱為實際引數,簡稱實參。實參和形參之間的資料傳遞...