首先,說一下第一個問題,第一個不交換是因為定義的k是一個指針,指針說白了就是一個指向,我指向你,他指向她,然后換成我指向她,他指向你,你把他們指向的位置交換,而并沒有交換他們地址里面存儲的值,這樣是并沒有任何區(qū)別,在最后函數(shù)結(jié)束之后,函數(shù)的那些指針指向全部釋放,和修改不修改沒什么兩樣;定義的是一個整型變量,他把s
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名注冊、網(wǎng)絡空間、營銷軟件、網(wǎng)站建設、礦區(qū)網(wǎng)站維護、網(wǎng)站推廣。
指針指向的地址里面的值與
t
指針指向的地址的值進行了交換,這樣就修改了內(nèi)存里面的值,即便是函數(shù)結(jié)束了也不會釋放,自然就能做到交換了。
第二個問題,存儲地址是會釋放,但是釋放的是函數(shù)內(nèi)部定義的局部變量,現(xiàn)在你已經(jīng)把s的地址通過return
返回回來并且存在
主函數(shù)的
r
中了,所以自然就不會釋放了
由于你在子函數(shù)int *shuzu(void)中定義的數(shù)組 a[4];屬于局部變量,在子函數(shù)結(jié)束時會被釋放,所以返回的指針變成野指針,會亂碼;簡單的解決方法有兩種,1. 將數(shù)組定義在主函數(shù)之前(#include stdio.h下面),那么就變成了全局變量,不會被釋放了;2.使用malloc或者calloc開空間后再賦給這個數(shù)組,這樣也不會被釋放了;第一種方法有缺點,以后學到全局變量的時候會知道,第二種方法估計你還沒學到,不過很簡單,百度一下就會了~~~
首先,你不應該返回局部變量的指針,因為局部變量在離開函數(shù)后就會被銷毀。如果你想這樣返回一個數(shù)組的話,你應該malloc出一個數(shù)組來返回。
至于應該return什么,return
(malloc出來的那個指針)就可以了。
例如
int**
foo()
{
int
**p
=
(int
**)malloc(sizeof(int
*)*10);
...
...
...
return
p;
}
這個p指向一個內(nèi)存段,這個內(nèi)存段存有十個int*類型的元素。