亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 結(jié)構(gòu)體變量為何不能在函數(shù)外賦值?非初始化哦· [打印本頁]

作者: kalo425    時間: 2014-07-07 19:41
標(biāo)題: 結(jié)構(gòu)體變量為何不能在函數(shù)外賦值?非初始化哦·

下面這個代碼,結(jié)構(gòu)體變量tagFool1 為啥不能再main外面賦值呢?因為執(zhí)行不到??結(jié)構(gòu)體賦值必須執(zhí)行的時候才行?那么普通的變量,比如下面的a又是啥情況?
  1. #include <stdio.h>

  2. struct FOO{
  3.         int a;
  4.         int b;
  5. };

  6. struct FOO tagFool1;
  7. int a;

  8. //tagFool1.a =1;//錯誤的
  9. a = 1;//這個算什么?

  10. int main()
  11. {       
  12.        
  13.         tagFool1.a =1;
  14.         return 0;
  15. }
復(fù)制代碼

作者: hellioncu    時間: 2014-07-07 20:30
a = 1; 沒有類型當(dāng)作int,相當(dāng)于 int a = 1; 由于前面也是int a; 都是int,所以沒有錯
作者: weishuo1999    時間: 2014-07-07 21:00
a=1;這樣能編譯過? 什么環(huán)境?
作者: kalo425    時間: 2014-07-08 13:45
你確定有仔細(xì)看我的帖子了???
回復(fù) 3# weishuo1999


   
作者: kalo425    時間: 2014-07-08 13:46
···· 好吧····我的真實問題是,為啥結(jié)構(gòu)體非得在函數(shù)內(nèi)賦值?
就是說,我給的代碼的11行,為啥是錯的呢?


回復(fù) 2# hellioncu


   
作者: hellioncu    時間: 2014-07-08 13:56
kalo425 發(fā)表于 2014-07-08 13:46
···· 好吧····我的真實問題是,為啥結(jié)構(gòu)體非得在函數(shù)內(nèi)賦值?
就是說,我給的代碼的11行,為啥是錯 ...


看來你還沒明白,這里a=1是初始化而不是賦值語句,等價于 int a=1;
不允許有游離的語句的
作者: folklore    時間: 2014-07-08 14:14
回復(fù) 3# weishuo1999


    c能過, c非強(qiáng)類型檢查語言。
作者: windoze    時間: 2014-07-08 14:17
回復(fù) 5# kalo425

“語句”必須放在函數(shù)內(nèi),這是規(guī)定,沒為什么。
作者: weishuo1999    時間: 2014-07-08 14:29
在函數(shù)體外初始化int a=1;這個是沒有問題的,但是如果int a;a=1;這樣是不對的。定義和賦值是不一樣的。gcc實測。回復(fù) 7# folklore


   
作者: hellioncu    時間: 2014-07-08 14:36
weishuo1999 發(fā)表于 2014-07-08 14:29
在函數(shù)體外初始化int a=1;這個是沒有問題的,但是如果int a;a=1;這樣是不對的。定義和賦值是不一樣的。 ...


看我6樓的回復(fù)。
你是用g++了吧
作者: weishuo1999    時間: 2014-07-08 14:48
確實,受教了,給了個warning我以為報錯了呢。回復(fù) 10# hellioncu


   
作者: kalo425    時間: 2014-07-08 16:03
恩恩,謝謝您的詳細(xì)解答。

還有一個問題,將S2 字符串連接到S1后面
  1. void StrConcat(char * S1,char * S2)
  2. {
  3.     int len;
  4.     len = strlen(S1);
  5.     S1 = S1 + len;
  6.     while((*S1++ = *S2++) != '\0');//

  7. }
復(fù)制代碼
while((*S1++ = *S2++) != '\0');有點疑問,這個while終止條件應(yīng)該是
while(*S2 != '\0'),
也就是說,(*S1++ = *S2++)返回 *S2 是么,這個咋辦定的呢?
原諒我的糾纏不休··(~ o ~)~zZ
回復(fù) 6# hellioncu


   
作者: hellioncu    時間: 2014-07-08 16:11
kalo425 發(fā)表于 2014-07-08 16:03
恩恩,謝謝您的詳細(xì)解答。

還有一個問題,將S2 字符串連接到S1后面while((*S1++ = *S2++) != '\0');有點 ...


(*S1++ = *S2++)這是個賦值表達(dá)式,其值就是所賦的值(就是這么規(guī)定的),也就是*S2




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2