其實并沒有每次進入函數(shù)都初始化k為0,只不過你每次的先return了,然后在改變k的值,所以k的值就一直沒變,都是0,你試試先把k的值改了,再return,應(yīng)該就行了
成都創(chuàng)新互聯(lián)公司2013年至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都做網(wǎng)站、成都網(wǎng)站制作網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元郊區(qū)做網(wǎng)站,已為上家服務(wù),為郊區(qū)各地企業(yè)和個人服務(wù),聯(lián)系電話:13518219792
看來你的C語言功底要加強一下了,說笑的!?。?/p>
在函數(shù)里調(diào)用另一個函數(shù)fun,要使用指針的方式才能改變它的值,如fun(int *x, int *y);
如果不使用指針而直接值傳遞調(diào)用,那么在調(diào)用完fun函數(shù)后,該函數(shù)做占用的內(nèi)存、堆棧都會被釋放,即a、b的值還是以前的,不會被改變;
使用指針的話,它會直接修改指針?biāo)赶虻膬?nèi)存的值(const除外),從而達到交換的目的。
常規(guī)類型(int、double、float、char等)的都不會變
指針類型(int*、double*、float*,char*等)的都會變
數(shù)組類型(int[]、double[]、float[],char[])的也都會變
類也會變(c++范疇)
總而言之:參數(shù)指向值的,都不會變;參數(shù)指向地址的都會變(數(shù)組也是指向地址的??梢岳斫鉃楸举|(zhì)也是指針)
你對函數(shù)調(diào)用和參數(shù)傳遞還不是很理解
1.首先函數(shù)調(diào)用的參數(shù)有形參和實參之分
swap(p,q);//p q為實參
void swap(int*a,int*b)//a b為形參
{int*t;
t=a;a=b;b=t;
}
2.指針變量名表示的是變量的值,這個值是其他變量的地址,而不是指針變量本身所在內(nèi)存空間的地址
如:
int a;//定義整型變量,假設(shè)其地址為0xaaaaaaaa
int *p;//定義一個指針變量p,肯定要為其分配內(nèi)存,假設(shè)為0xffffffff,還沒初始化,里面的數(shù)據(jù)是不確定的。
p=a;//p表示的0xffffffff里面的數(shù)據(jù),是a的地址,執(zhí)行后0xffffffff里面的數(shù)據(jù)變成a的地址,即0xaaaaaaaa
*p=5;//往a里寫入數(shù)據(jù)
3.形參跟實參是不同的變量,占用不同的內(nèi)存空間
所以a b已經(jīng)是兩個跟p q不同的變量了。
只不過是值跟他們相等罷了。
就如int m,n;
m=n; 你能說m和n是同個變量么?
4.既然形參和實參是不同的變量,
t=a;a=b;b=t;
交換a b的值(交換存儲在a b指針變量里的數(shù)據(jù),這個數(shù)據(jù)是地址,變成a跟q指向同一個對象,b q指向同一個對象)不會影響到p q的值
int t;
t=*a;*a=*b;*b=t;//交換a b指針變量里的地址所指向的數(shù)據(jù),這樣才能交換。
如果通過函數(shù)傳參方式調(diào)用,并且不是傳的指針,那就不會改變原來的值,如果想改變?nèi)肿兞康闹?,可以直接在函?shù)中使用,不需要傳參。也或者你傳指針進去