4 回答

TA貢獻(xiàn)2016條經(jīng)驗(yàn) 獲得超9個(gè)贊
include <stdio.h>
int func(int x) //這個(gè)參數(shù)傳得沒有意義,傳入后沒有引用其值
{int y=0;
static int z=3;
x=z++, y++; //','操作符,取最后一個(gè)表達(dá)式的結(jié)果為最終結(jié)果,即y++,由于y是局部變量,每次進(jìn)入該函數(shù)y都會(huì)被初始化成0,又y++是先引用后自加,所以賦給x的是y的初始值0
return(x); //返回始終為0
}
void main()
{int a=2,i,b;
for(i=0;i<2;i++) //循環(huán)3次,a每次加1
b=func(a++); //前面說了,func的參數(shù)傳入無意義,所以返回值與a的值無關(guān),由于func始終返回為0,所以b始終為0
printf("%d\n",b); //打印“0”
}

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊
有兩個(gè)知識(shí)點(diǎn)需要知道:
1、靜態(tài)變量與普通變量無二,區(qū)別在于靜態(tài)變量始終占有內(nèi)存,進(jìn)出函數(shù)不會(huì)被改變,不消失。只在同一文件中能調(diào)用,其他文件無法調(diào)用。
在你的程序中,b的值取決于函數(shù)func中的z值,第一次循環(huán)進(jìn)去函數(shù)func返回3,靜態(tài)變量自加變?yōu)?,第二次循環(huán)返回4.

TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個(gè)贊
C語言的數(shù)據(jù)區(qū)分為靜態(tài)存儲(chǔ)區(qū)與動(dòng)態(tài)存儲(chǔ)區(qū)。
靜態(tài)存儲(chǔ)是指在程序運(yùn)行期間給變量分配固定存儲(chǔ)空間的方式。如全局變量存放在靜態(tài)存儲(chǔ)區(qū)中,程序運(yùn)行時(shí)分配空間,程序運(yùn)行完釋放。
動(dòng)態(tài)存儲(chǔ)是指在程序運(yùn)行時(shí)根據(jù)實(shí)際需要?jiǎng)討B(tài)分配存儲(chǔ)空間的方式。如形式參數(shù)存放在動(dòng)態(tài)存儲(chǔ)區(qū)中,在函數(shù)調(diào)用時(shí)分配空間,調(diào)用完成釋放。

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個(gè)贊
static變量z只初始化一次,所以for循環(huán)兩次,第一次b等于z等于3,同時(shí)z++變?yōu)?,第二次循環(huán)時(shí)b等于4,同時(shí)z++變成5。由于,顯示的是最后一次的b,所以最終結(jié)果為4
- 4 回答
- 0 關(guān)注
- 848 瀏覽
添加回答
舉報(bào)