首先,說一下第一個問題,第一個不交換是因為定義的k是一個指針,指針說白了就是一個指向,我指向你,他指向她,然后換成我指向她,他指向你,你把他們指向的位置交換,而并沒有交換他們地址里面存儲的值,這樣是并沒有任何區(qū)別,在最后函數(shù)結(jié)束之后,函數(shù)的那些指針指向全部釋放,和修改不修改沒什么兩樣;定義的是一個整型變量,他把s
站在用戶的角度思考問題,與客戶深入溝通,找到和碩網(wǎng)站設(shè)計與和碩網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、申請域名、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋和碩地區(qū)。
指針指向的地址里面的值與
t
指針指向的地址的值進行了交換,這樣就修改了內(nèi)存里面的值,即便是函數(shù)結(jié)束了也不會釋放,自然就能做到交換了。
第二個問題,存儲地址是會釋放,但是釋放的是函數(shù)內(nèi)部定義的局部變量,現(xiàn)在你已經(jīng)把s的地址通過return
返回回來并且存在
主函數(shù)的
r
中了,所以自然就不會釋放了
C語言指向函數(shù)的指針承載的信息比較復(fù)雜,組織起來要素要寫全。根據(jù)指向函數(shù)的指針的書寫語法,下面的代碼就是一個返回函數(shù)指針的函數(shù):int (*f(void))(int){//f是函數(shù),沒有參數(shù),返回指向一個函數(shù)的指針;這個被指向的函數(shù)有一個int型形參,且返回一個int值 return fun;//fun是個函數(shù)名,必須具備一個int形參、返回int值的要求}以下代碼可以驗證上述函數(shù)的正確性:pre t="code" l="cpp"http://#include "stdafx.h"http://If the vc++6.0, with this line.
#include "stdio.h"
int fun(int n){
printf("abcdef\n");
return n;
}
int (*f(void))(int){
return fun;
}
int main(void){
printf("%d\n",f()(100));//調(diào)用函數(shù)f,通過f返回的指針用100調(diào)用函數(shù)fun
return 0;
}輸出是:abcdef100
你寫錯了,正確的應(yīng)該是如下兩種:
int *a(int, intint)
與
int (*a)(int ,int)
這兩種形式第一種表示返回一個指向整形變量的指針,第二種為指針指向一個含有兩個整形變量參數(shù)的函數(shù)。