設計3個函式,分別實現已下功能:
1 #include 2 #include3 #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...