1樓:
第一題。這個乙個值傳遞的問題, pointer_1 指向 a, pointer_2 指向 b
swap(pointer_1,pointer_2);
只是將pointer_1和pointer_2的值傳遞給函式,既將p賦值為pointer_1,q複製為pointer_2
在函式里面交換指向只是p和q的值,並沒有改變pointer_1和pointer_2的值。
第二題。這也是個值傳遞問題,但是在函式體內。
p和*q就是通過指標指向了記憶體單元,即*p就是單元a,*q就是單元b
然後交換p和q指向的記憶體單元的內容,既將a的值複製給s,將b的值複製給a,在將a的值複製給b,達到交換a和b的值。
函式退出之後,pointer_1和pointer_2的值還是沒有變,還是指著同樣的記憶體單元。既pointer_1指向a,pointer_2指向b.
函式里面只是交換了a和b的值。
2樓:
第一題:void swap(int *p,int *q)int *s;
s=p;p=q;
q=s;在上函式中,p,q是形參,複製pointer1,pointer2位址,所以函式內的位址交換並不影響main()
函式中的pointer1,pointer2值。
第二題。void swap(int *p,int *q)int s;
s=*p;p=*q;
q=s;swap()中指標指向的值被改變,上函式正確!!
3樓:網友
第一題,你在swap函式里面用到的兩個指標p,q,它們也是在函式內部定義的,所以它們的作用域也就僅僅在函式內部,你確實交換了兩個指標的值,但是這沒有任何意義,因為指標p跟你在main函式中定義的指標point_1沒有任何關係,雖然你改變了p,但是ponit_1不受任何影響,point_2與q的關係也同樣。
如果你想讓兩個值交換,直接交換p和q所指向的值就可以了。
第二題的原因和第一題累死,你可以思考下進行練習。
4樓:網友
指標就是乙個表示記憶體位置整型數。所以函式返回指標時,實際就是返回乙個表示記憶體位置的整型數。
char p hello world"; 這一句執行時候,指標的數值指示的是 "hello world"的記憶體位置,乙個是"hello world"臨時區域性變數,是在棧上分配的,這個指標的數值是這個棧分配的數值,應該何函式返回位址差不了多少, getstring函式返回的也是這個指標數值,因為棧記憶體會隨意用作其他用途,比如說分配給其他函式變數使用鄧,所以這個數值儲存的資料會被覆蓋是無意義的,這個位址僅僅是在getstring函式執行時才被初始化為hello world,getstring函式呼叫完了,這個位址很快就被用作其他用途。
而getmemory3返回的也是乙個記憶體位址(指標),但這個位址是通過char *p = char *)malloc(sizeof(char) *num); 得來的。 malloc這個函式確保這個位址是乙個全域性位址而且不會用作其他用途,所以這個指標指向的位址是永遠有效的,知道你用free這個函式提示系統我不需要這個記憶體了,那麼系統才會用作其他用途。 malloc獲取的位址(指標)就是有這個特點,至於為什麼有這個特點,那是人家規定的!!
汗,寫了這麼多,就給點分吧!
c 指標傳遞問題求解,急
1你可以通過返回值的方法來把指標傳給外部,可以參考如下 include int f void void main 會有一個出錯資訊,指出找不到p,是因為p不在全域性域內,而new的指標只能被delete,但你沒有把它delete掉,而被懸空了所以會造成風險。所以,你一定要在new的域內顯示的dele...
php建構函式傳遞值的問題,PHP建構函式傳遞值的問題
construct hostname 裡面的自引數是構造函 bai數的參du 數,只能在建構函式內部呼叫,zhi public hostname 這是類的引數,整個dao類內部包括繼承類都可以呼叫 第二種的引數只能在建構函式中使用,而第一種,則將傳來的引數賦值給類的變數,所以第一種的hostname...
資訊與傳遞的方式,資訊與傳遞的方式
我國是世界上最早建立有組織的傳遞資訊系統的國家之一。早在三千多年前的商代,資訊傳遞就已見諸記載。乘馬傳遞曰驛,驛傳是早期有組織的通訊方式。位於嘉峪關火車站廣場的 驛使 雕塑,它取材於嘉峪關魏晉壁畫墓,驛使手舉簡牘文書,驛馬四足騰空,速度飛快。此磚壁畫圖於一九八二年被中華全國集郵聯合會第一次代表大會作...