C語言的問題,要考試了

2022-12-11 07:45:13 字數 927 閱讀 7468

1樓:闊氣剋剋

1,3是不行的,2是肯定可以的,4的話,你需要改成這樣就行:

void swap4(int *pa,int *pb)

就是說要給新宣告的指標開空間,才能成功,否則會記憶體洩漏的!

至於為什麼,c語言是按值傳遞的,進入函式之後相當於一個值的副本,也就是說,呼叫一次函式,相當於在那個函式裡新建了一個變數,並使新建的變數等於傳進來的引數的值。

那麼來看1,swap1裡面的a,b都是全新的變數,無論怎麼操作,都無法改變main函式裡的a,b。

看2,swap2裡面的pa和pb是指標副本,也就是等於main函式裡a,b的記憶體地址,通過*操作對指標取值,是可以通過地址找到main函式裡a,b的值的,也就是可以修改成功了。

看3,swap3其實和swap1一樣,pa和pb是指標的副本,無論怎麼改變pa和pb指標的地址的值,都改變不了a和b的值,甚至也改變不了main函式裡pa和pb的地址的值。

看4,swap4只是用一個指標型別替代了swap2的一個整型而已,所以只要開空間,也可以成功。

2樓:空號一號

首先你執行一下就可以知道哪幾個可以交換了。我覺得swap2和swap4是可以交換的。

swap1中,a和b傳入swap1後會複製一份,然後swap1對複製產生的副本進行修改而原來的沒動,所以不會交換a和b;

swap2和swap4中,傳入a和b的指標,這兩個指標即使複製一份也仍然指向同樣的a和b,所以在指標的副本上進行解引用是可以修改原來的a和b的;

swap3中,傳入a和b的指標,被複制一份,但是操作指標本身是不會修改指標指向的資料的,應該像swap2或swap4那樣操作指標指向的數。所以a和b的值不會被修改。

3樓:

#include

#include

int main(void)

兩個關於C語言的問題,明天就要考試了,麻煩大家了

樓上的人家說的是鍵盤輸入 然後逆序輸出,不是隨機賦值 include void main 你把你輸入的每一個數分解成單個的數後在還原如 a i 1234 x a i 1000 y a i 100 10 z a i 10 10 m a i 10 a i m 1000 z 100 y 10 x 此時a ...

馬上二級C語言考試了,急急急

第一個交換的是指標變數x,y的值,這些值是出來的實參 兩個整型變數地址 的拷貝。完成的是交換拷貝的地址,就是傳值呼叫。對x y指向的內容並沒有改變。如果非要交換指標的指向,可以這樣做 字串的交換隻能這樣作,而整型等基本型別的交換就沒必要這樣做了 void fun int x,int y main 你...

C語言問題C語言問題,C語言問題C語言問題

include include int main b k p b k 0 puts b return 0 c語言問題c語言問題 include int main int h,m scanf d d h,m printf s num h if m 0 else printf o clock print...