黑馬程式設計師 利用swap函式研究C的指標

2022-08-27 22:18:23 字數 1139 閱讀 5786

設計3個函式,分別實現已下功能:

1 #include 2 #include 

3 #include 4

void swap_int(int* pa, int* qa) //交換兩個整數510

1112

void swap_intpur(int** ppa,int** qqa) //交換兩個整形指標

1318

19void swap_any(void* a, void* b, size_t len) //交換任意兩個同型別的變數

2026

27int

main()

28

輸出結果為

origin a=4, b=3

after swap_int, a=3, b=4

after swap_intpur, *p=4, *q=3

after swap_any, a=4, b=3

在c語言中,所有函式引數都是「通過值」傳遞的,也就是說,傳遞給被呼叫函式的引數值存放在臨時變數中,而不是存放在原來的變數中,所以被呼叫的函式不能直接修改主調函式中的變數的值。此時我們將主函式中兩變數的記憶體位址傳遞給被呼叫函式,雖然這個位址是存放在臨時變數裡,但我們在呼叫的函式中將這位址中的內容調換,從而達到交換主函式中兩整數變數的值的目的。

同樣,我們並不能直接交換連個整形指標,同樣是將兩個整形指標的位址傳入被呼叫的函式中,交換方式和第乙個函式類似。但此時注意的是,我們是將p指標和q指標的位址傳入被呼叫函式,所以在函式swap_intpur的*ppa中存放指標p,所以我們需要用乙個指標變數作為緩衝變數,即此時我們用* temp而不是temp。

不同型別的變數,在記憶體中的儲存長度是不同的,所以我們為應對任意變數,在傳遞變數的同時也要傳遞變數的儲存長度。因為傳遞的長度並不確定,所以我們在swap_any中對len的型別申明採用size_t,以確保其大小足以保證儲存記憶體中物件的大小。在呼叫此函式時也是利用sizeof獲取傳入變數的長度。

malloc函式的作用是向系統申請分配指定size個位元組的記憶體空間,利用這一函式我們就可以確定緩衝變數的長度。最後利用memcp函式,其作用是記憶體拷貝,即從源所指的記憶體位址的起始位置開始拷貝n個位元組到目標所指的記憶體位址的起始位置中。

總結指標:指向一塊記憶體的起始位置,指標的型別決定了這塊記憶體的大小。

黑馬程式設計師 SQL 函式

windows phone 7手機開發 net培訓 期待與您交流!abc 求絕對值。ceiling 捨入到最大整數。ceiling 天花板 floor 捨入到最小整數。floor 地板 round 四捨五入。round 3.1525,2 len 字串長度。len abcd ltrim 去掉左邊的空格...

黑馬程式設計師 聚合函式

聚合函式 像sum count g 等都是聚合函式 使用用聚合函式的時候,一般都要用到group by 先進行分組,然後再進行聚合函式的運算。運算完後就要用到h ing 的用法了,就是進行判斷了。select customer name,sum balance from balance group ...

黑馬程式設計師

asp.net android ios開發 net培訓 期待與您交流!map hashtable 底層是雜湊表資料結構,不可以存入null鍵和null值。該執行緒是同步的,jdk1.0出現,效率低。hashmap 底層是雜湊表資料結構,允許使用null鍵和null值。該集合執行緒是不同步的,將has...