初始化和賦值的區別
區別說明:賦值操作是在兩個已經存在的對象間進行的,而初始化是要創建一個新的對象,並且其初值來源於另一個已存在的對象。
int a=12 ; //初始化, copy 0X000C to a
a =12 ; //賦值, copy 0X000C to a
1、靜態變量在定義時未顯式地指定初值,則自動初始化爲相應類型的零值(數值型爲0或0.0;字符型爲'\0'),即靜態變量能夠自動初始化(有稱之爲隱式初始化),且靜態變量只初始化一次。靜態變量定義時顯式地指定了值,則其初值爲指定的值。定義時無論是否顯式地指定了初始值,都只能被初始化一次。但可以通過賦值的方式多次修改靜態變量的值。
2、初始化與賦值是不同的概念。
靜態變量的初始化是在編譯時進行,變量的賦值是在函數或程序運行時進行。靜態變量只初始化一次,但可以通過賦值的方式多次修改靜態變量的值。
以下程序要求主函數中每個循環結束後都能輸出5行星號。分析以下程序的輸出結果。
int i;
main()
{ void pr(); void pt(); void pk(); /*對被調函數的聲明*/
for(i=0;i<5;i++) pr(); /*對函數prt()調用5次*/
printf("\n");
for(i=0;i<5;i++) pt(); /*對函數prt()調用5次*/
printf("\n");
for(i=0;i<5;i++) pk(); /*對函數prt()調用5次*/
}
void pr()
{ static int i=0; /*定義時顯式地指定初值爲0,稱爲初始化,靜態變量僅一次*/
printf("%d: ",i); /*輸出上次調用該函數後保留的i的值*/
for(i=1;i<=5;i++);/*此句中i=1爲賦值,將上次調用後保留的i的值重新賦值爲1*/
printf("%c",'*');
printf("\n");
}
請分析:pt函數同樣被調用了5次,但結果只輸出了一行星號,而不是5行星號。驗證了靜態變量的賦值和靜態變量的初始化的不同概念。
void pt()
{ static int i; /*定義時未顯式地指定初值,但該變量仍被初始化一次,起初值爲0 */
printf("%d: ",i); /*輸出上次調用該函數後保留的i的值*/
for(;i<5;i++) /*i未被重新賦值,即保留了上次調用後的保留值(5),所以下次調用該函數時循環條件不再滿足,因爲i值已經等於5了*/
printf("%c",'*');
printf("\n");
}
void pk()
{ static int i; /*定義時未顯式地指定初值,但該變量仍被初始化一次,起初值爲0*/
printf("%d: ",i); /*輸出上次調用該函數後保留的i的值*/
for(i=0;i<5;i++) printf("%c",'*'); /*循環中的i=1爲賦值 */
printf("\n");
}
int a=12 ; //初始化, copy 0X000C to a
a =12 ; //賦值, copy 0X000C to a
1、靜態變量在定義時未顯式地指定初值,則自動初始化爲相應類型的零值(數值型爲0或0.0;字符型爲'\0'),即靜態變量能夠自動初始化(有稱之爲隱式初始化),且靜態變量只初始化一次。靜態變量定義時顯式地指定了值,則其初值爲指定的值。定義時無論是否顯式地指定了初始值,都只能被初始化一次。但可以通過賦值的方式多次修改靜態變量的值。
2、初始化與賦值是不同的概念。
靜態變量的初始化是在編譯時進行,變量的賦值是在函數或程序運行時進行。靜態變量只初始化一次,但可以通過賦值的方式多次修改靜態變量的值。
以下程序要求主函數中每個循環結束後都能輸出5行星號。分析以下程序的輸出結果。
int i;
main()
{ void pr(); void pt(); void pk(); /*對被調函數的聲明*/
for(i=0;i<5;i++) pr(); /*對函數prt()調用5次*/
printf("\n");
for(i=0;i<5;i++) pt(); /*對函數prt()調用5次*/
printf("\n");
for(i=0;i<5;i++) pk(); /*對函數prt()調用5次*/
}
void pr()
{ static int i=0; /*定義時顯式地指定初值爲0,稱爲初始化,靜態變量僅一次*/
printf("%d: ",i); /*輸出上次調用該函數後保留的i的值*/
for(i=1;i<=5;i++);/*此句中i=1爲賦值,將上次調用後保留的i的值重新賦值爲1*/
printf("%c",'*');
printf("\n");
}
請分析:pt函數同樣被調用了5次,但結果只輸出了一行星號,而不是5行星號。驗證了靜態變量的賦值和靜態變量的初始化的不同概念。
void pt()
{ static int i; /*定義時未顯式地指定初值,但該變量仍被初始化一次,起初值爲0 */
printf("%d: ",i); /*輸出上次調用該函數後保留的i的值*/
for(;i<5;i++) /*i未被重新賦值,即保留了上次調用後的保留值(5),所以下次調用該函數時循環條件不再滿足,因爲i值已經等於5了*/
printf("%c",'*');
printf("\n");
}
void pk()
{ static int i; /*定義時未顯式地指定初值,但該變量仍被初始化一次,起初值爲0*/
printf("%d: ",i); /*輸出上次調用該函數後保留的i的值*/
for(i=0;i<5;i++) printf("%c",'*'); /*循環中的i=1爲賦值 */
printf("\n");
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.