指標值與位址傳遞的問題

2025-01-23 14:30:07 字數 1611 閱讀 2016

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...

資訊與傳遞的方式,資訊與傳遞的方式

我國是世界上最早建立有組織的傳遞資訊系統的國家之一。早在三千多年前的商代,資訊傳遞就已見諸記載。乘馬傳遞曰驛,驛傳是早期有組織的通訊方式。位於嘉峪關火車站廣場的 驛使 雕塑,它取材於嘉峪關魏晉壁畫墓,驛使手舉簡牘文書,驛馬四足騰空,速度飛快。此磚壁畫圖於一九八二年被中華全國集郵聯合會第一次代表大會作...