第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么第三個for里面不用加int而第四個for里面不加int就報錯呢?

為什么第三個for里面不用加int而第四個for里面不加int就報錯呢?

qq_笑_17 2022-06-01 18:14:08
編程遇到類似的問題我就寫了這個小程序,在VC++6.0中編譯為什么第三個for里面不用加int而第四個for里面不加int就報錯呢?void main(){int a[3][4];for(int i=0;i<3;i++)for(int j=0;j<4;j++)a[i][j]=i;for(i=0;i<3;i++)for(int j=0;j<4;j++)a[i][j]=j;}
查看完整描述

2 回答

?
波斯汪

TA貢獻1811條經(jīng)驗 獲得超4個贊

舉個例子來說吧,比如有這么個for循環(huán):
for(int i=0;i<3;i++)
for(int j=0;j<4;j++)
do_something();

它可以展開為:
int i=0;
while(i<3)
{/*局部域A開始*/
int j=0;
while(j<4)
{/*局部域B開始*/
do_something();
j++;
}/*局部域B結(jié)束*/
i++;
}/*局部域A結(jié)束*/

相信學過C++的人都知道域的概念,這里while后面的大括號構(gòu)成一個局部域,而int i和int j則恰恰只是這兩個局部域的變量,因為他們的聲明是在對應(yīng)域的頭部,但是i和j的位置是有區(qū)別的,請仔細看上面的注釋。
因此,上面的例子中,在域A以外引用j是非法的,但是,在域A外引用i不是非法的,因為i就是定義在域A之外的(實際上,i相當于是聲明在全局域,即main域中的)。

我想這也就同樣解釋了為什么樓主的代碼中,第三個for中的i可以不加int,因為這時的i是已經(jīng)在main里面聲明過了的,因此不需要再聲明。而j就不行。
前面說過,第一個j的作用域在第4個for這里已經(jīng)結(jié)束了,因此如果這里不加int直接對j進行引用將是非法的,所以必須加一個聲明。

所以一般遇到這種情況,我提倡這樣寫:
void main()
{
int i,j;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
…… // 做某些事情
for(i=0;i<3;i++)
for(j=0;j<4;j++)
…… // 做其他事情
}

P.S. 樓上代碼錯誤,i和j被重復聲明。


查看完整回答
反對 回復 2022-06-06
?
浮云間

TA貢獻1829條經(jīng)驗 獲得超4個贊

我想應(yīng)該是 上面的主方法里定義過了 i ,而后面的j 前面沒有定義,所有不能認識會報錯!
如果你這樣就不會報錯了
void main()
{int a[3][4];
int i,j;
for(int i=0;i<3;i++)
for(int j=0;j<4;j++)
a[i][j]=i;
for(i=0;i<3;i++)
for(int j=0;j<4;j++)
a[i][j]=j;
}


查看完整回答
反對 回復 2022-06-06
  • 2 回答
  • 0 關(guān)注
  • 410 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號