11 19C語言 指標變數作為函式引數

2021-06-19 06:50:39 字數 1294 閱讀 9355

今天學習c語言的小結;

一.指標變數作為函式引數;

函式的引數不僅可以是整型、實型、字元型等資料,還可以是指標型別。它的作用是將乙個變數的位址傳送到另乙個函式中。

首先看一下練習題:輸入a和b兩個整數,按先大後小的順序輸出a和b。下面是實現演算法除錯的程式:

思路:swap是使用者定義的函式,它的作用是交換兩個變數(a和b)的值。swap函式的形參p1、p2是指標變數。程式執行時,先執行main函式,輸入a和b的值。然後將a和b的位址分別賦給指標變數pointer_1和pointer_2,使pointer_1指向a,pointer_2指向b。如圖(1):

接著執行if語句,由於a〈b,因此執行swap函式。注意實參pointer_1和pointer_2是指標變數,在函式呼叫時,將實參變數的值傳遞給形參變數。採取的依然是「值傳遞」方式。因此虛實結合後形參p1的值為&a,p2的值為&b。這時p1和pointer_1指向變數a,p2和pointer_2指向變數b。如圖(2):

接著執行執行swap函式的函式體使*p1和*p2的值互換,也就是使a和b的值互換。如圖(3):

函式呼叫結束後,p1和p2不復存在(已釋放)如圖(4):

二,指標變數幾個問題的進一步說明:指標變數可以進行某些運算,但其運算的種類是有限的。它只能進行賦值運算和部分算術運算及關係運算。

1.指標運算子

(1) 取位址運算子&:取位址運算子&是單目運算子,其結合性為自右至左,其功能是取變數的位址。在scanf函式及前面介紹指標變數賦值中,我們已經了解並使用了&運算子。

(2) 取內容運算子*:取內容運算子*是單目運算子,其結合性為自右至左,用來表示指標變數所指的變數。在*運算子之後跟的變數必須是指標變數。

需要注意的是指標運算子*和指標變數說明中的指標說明符*不是一回事。在指標變數說明中,「*」是型別說明符,表示其後的變數是指標型別。而表示式中出現的「*」則是乙個運算子用以表示指標變數所指的變數。

今天就先寫這些吧,明天繼續加油!!

C語言指標變數作為函式引數

有讀者反饋,不理解字元陣列和普通陣列的區別,下面筆者作一下解答。實際上,字元陣列和普通陣列一樣,沒有本質區別。請大家注意陣列型別的含義 資料型別指的是陣列所包含的元素的型別,而不是陣列名的型別,陣列名永遠是乙個指標,指向第乙個元素的位址,即陣列首位址。字元陣列的每個元素都是char型別,整型陣列的每...

C語言 指標變數作為函式引數詳解

在c語言中,函式的程式設計客棧引數不僅可以是整數 小數 字元等具體的資料,還可以是指向它們的指標。用指標變數作函式引數可以將函式外部的位址傳遞到函式內部,使得在函式內部可以操作函式外部的資料,並且這些資料不會隨著函式的結束而被銷毀。像陣列 字串 動態分配的記憶體等都是一系列資料的集合,沒有辦法通過乙...

指標作為函式引數,C語言指標作為函式引數詳解

include void swap int a,int b 函式宣告 intmain void void swap int a,int b 大家想一下,執行這個程式是否能互換 i 和 j 的值?不能!i 還是3,j 還是5。因為實參和形參之間的傳遞是單向的,只能由實參向形參傳遞。被調函式呼叫完之後系...