音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

迷惑,為什么c會(huì)出現(xiàn)這個(gè)問題?

作者:resetnow 欄目:驅(qū)動(dòng)編程
迷惑,為什么c會(huì)出現(xiàn)這個(gè)問題?
小弟在tc上編一些小程序,最近被一個(gè)問題難住了。下面是一個(gè)簡(jiǎn)單的試驗(yàn)程序,在兩個(gè)子程序中分別輸出一個(gè)數(shù)組。程序如下:
float f1(float a[][3]);
float f2(float a[][3]);
main()
{float a[3][3]={1,2,3,4,5,6,7,8,9};
f1(a);
f2(a);
}
float f1(float a[][3])
{int i,j;
printf("this is the first time:\n");
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
  printf("%3.1f, ",a[i][j]);
  printf("\n");
}
}
float f2(float a[][3])
{int i,j;
printf("this is the second time:\n");
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
  printf("%3.1f, ",a[i][j]);
  printf("\n");
}
}
結(jié)果是:1 2 3
        4 5 6
        7 8 9
        floating pointer error:domain
運(yùn)行f1時(shí)沒問題。到f2時(shí)就會(huì)說:floating pointer error:Domain。把數(shù)組換成int型的就沒問題。在別的類似的程序里也有這樣的問題,百思不得其解,請(qǐng)大家不吝賜教!

2樓: >>參與討論
ylbzx
你的問題嘛,。。。。搞定!
開始,我用 vc6.0,沒見你說的情況,一切正常。。。。
然后,我用 Bc3.0,  見你說的情況,問題重現(xiàn)。。。。
開始解決:
      剛開始,我當(dāng)是 windows2000 的問題,重啟機(jī)器,進(jìn)入 DOS ,問題依舊。。。。。但見了,編譯的提示警告,得知:你的兩個(gè)函數(shù)有返回類型,但沒有返回值!!!!!加上返回值后,一切正常,DOS,windows2000,Bc3.0 都 OK ^_^

因此,答案就是你沒有加函數(shù)返回語句。
程序改為:
float f1(float a[][3]);
float f2(float a[][3]);
void main()
{float a[3][3]={1,2,3,4,5,6,7,8,9};
f1(a);
f2(a);
}
float f1(float a[][3])
{int i,j;
printf("this is the first time:\n");
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
  printf("%3.1f, ",a[i][j]);
  printf("\n");
}
return 1.0;
}
float f2(float a[][3])
{int i,j;
printf("this is the second time:\n");
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
  printf("%3.1f, ",a[i][j]);
  printf("\n");
}
return 1.0;
}
執(zhí)行結(jié)果:(這可是我拷貝執(zhí)行后的結(jié)果,并非自己手寫的喲。)
this is the first time:
1.0, 2.0, 3.0,
4.0, 5.0, 6.0,
7.0, 8.0, 9.0,
this is the second time:
1.0, 2.0, 3.0,
4.0, 5.0, 6.0,
7.0, 8.0, 9.0,



3樓: >>參與討論
resetnow
謝謝,還有一事求教
謝謝ylbzx!呼喚論壇里多一些這樣熱心的高手

  請(qǐng)問用不到函數(shù)的返回值時(shí)也要return嗎?為什么return 1.0,因?yàn)楹瘮?shù)是float型的嗎?int型的是不是也要return 1?
  我查遍了老譚的書,沒有這方面的內(nèi)容。或許我該買本更深入一點(diǎn)的書了

4樓: >>參與討論
ylbzx
Re:請(qǐng)問用不到函數(shù)的返回值時(shí)也要return嗎?
TC2.0 里面函數(shù)有返回類型,就必須要 return (為了一致性,但沒有 void 類型);C++  里面就沒有這個(gè)限制,c++ 里面函數(shù)為 void 類型,則函數(shù)可以沒有 return ;如果不為 void 則要有return ,(好像是這樣),沒有的話,就會(huì)有編譯警告啦。。

5樓: >>參與討論
computer00
如果你不需要返回值,你聲明函數(shù)的時(shí)候,聲明成無返回類型就行了
如:void f2(float a[][3]);

6樓: >>參與討論
renmingcan
頂!1
 
7樓: >>參與討論
yzilong
你的函數(shù)聲明的時(shí)候就已經(jīng)聲明有返回了!
float f1(float a[][3]);
float f2(float a[][3]);
說明你的函數(shù)返回float型數(shù)據(jù),如果子程序中沒有返回,在TC中是會(huì)報(bào)錯(cuò)的。
如果子程序中沒有返回的話,會(huì)默認(rèn)為int(好像是int型的)。
你的程序應(yīng)該不是執(zhí)行到 f2 的時(shí)候報(bào)錯(cuò)的,而是f1,因?yàn)榉祷氐模J(rèn))int類型跟聲明的float不同。
如果可以執(zhí)行f1,f2肯定也可以。

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
wince矩陣鍵盤驅(qū)動(dòng)能用了
求救關(guān)于漢字庫的讀出????
低速mcu通過LRDYi#和9052握手求助!
很奇怪的通信問題
請(qǐng)問哪里有下DebugPrint的,急用,謝謝
免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)