亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? c語言常見錯誤.htm

?? 一些C的常見錯誤
?? HTM
?? 第 1 頁 / 共 5 頁
字號:
              <TR>
                <TD align=middle height=50><FONT class=red_3 
                  size=3><B>C源程序常見錯誤分析</B></FONT></TD></TR>
              <TR>
                <TD class=gray 
                  align=middle>2004年5月7日&nbsp;&nbsp;作者:沈文&nbsp;&nbsp;精誠電子設(shè)計&nbsp;&nbsp;瀏覽選項: 
<!--
<a href="javascript:;" onclick="javascript:do_zooms('font_word',16);">大</a>
<a href="javascript:;" onclick="javascript:do_zooms('font_word',14);">中</a>
<a href="javascript:;" onclick="javascript:do_zooms('font_word',12);">小</a>&nbsp;
--><SELECT 
                  onchange="if(this.options[this.selectedIndex].value!=''){do_color('font_word',this.options[this.selectedIndex].value);}" 
                  size=1 name=do_color_frm> <OPTION value="" 
                    selected>顏色</OPTION> <OPTION style="COLOR: #000000" 
                    value=#000000>默認</OPTION> <OPTION style="COLOR: #808080" 
                    value=#808080>灰度</OPTION> <OPTION style="COLOR: #808000" 
                    value=#808000>橄欖色</OPTION> <OPTION style="COLOR: #008000" 
                    value=#008000>綠色</OPTION> <OPTION style="COLOR: #0000ff" 
                    value=#0000FF>藍色</OPTION> <OPTION style="COLOR: #800000" 
                    value=#800000>褐色</OPTION> <OPTION style="COLOR: #ff0000" 
                    value=#FF0000>紅色</OPTION></SELECT>&nbsp;&nbsp;&nbsp;本文已被瀏覽&nbsp;506&nbsp;次</TD></TR>
              <TR>
                <TD height=10></TD></TR>
              <TR>
                <TD vAlign=top calss="bw">
                  <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
                    <TBODY>
                    <TR>
                      <TD width=22 background=C語言常見錯誤.files/view_line.gif 
                      height=1></TD>
                      <TD bgColor=#666666></TD>
                      <TD width=1 bgColor=#666666 rowSpan=5></TD></TR>
                    <TR>
                      <TD width=22 background=C語言常見錯誤.files/view_b.gif 
                      height=5></TD>
                      <TD></TD></TR>
                    <TR>
                      <TD background=C語言常見錯誤.files/view_bg.gif></TD>
                      <TD align=middle>
                        <TABLE class=tf width="98%" align=center border=0>
                          <TBODY>
                          <TR>
                            <TD class=bw width="100%"><FONT class=htd 
                              id=font_word 
                              style="FONT-SIZE: 14px; FONT-FAMILY: 宋體, Verdana, Arial, Helvetica, sans-serif">《AVR單片機C語言開發(fā)入門指導(dǎo)》一書的第二章第五小節(jié)<BR><BR>一、C語言出錯有兩種情況:<BR><BR>1、語法錯誤。指編程時違背了C語法的規(guī)定,對這類錯誤,編譯程序一般都能夠給出“出錯信息”,并且告訴在哪一行出錯及出錯的類型。只要仔細檢查,是可以很快發(fā)現(xiàn)錯誤并排除的。<BR><BR>2、邏輯錯誤。程序并無違背語法規(guī)則,但程序執(zhí)行結(jié)果與原意不符。這是由于程序設(shè)計人員寫出的源程序與設(shè)計人員的本意不相同,即出現(xiàn)了邏輯上的混亂。<BR><BR>例如:<BR><BR>unsigned&nbsp;char&nbsp;i=1;<BR><BR>unsigned&nbsp;int&nbsp;sum=0;<BR><BR>while&nbsp;(i&lt;=100)<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;sum=sum+i;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;i++;<BR><BR>在上例中,設(shè)計者本意是想求從1到100的整數(shù)和,但是由于循環(huán)語句中漏掉了大括號,使循環(huán)變?yōu)樗姥h(huán)而不是求累加。對于這種錯誤,C編譯通常都不會有出錯信息(因為符合C語法,但有部分編譯系統(tǒng)會提示有一個死循環(huán))。對于這類邏輯錯誤,比語法錯誤更難查找,要求程序設(shè)計者有豐富的設(shè)計經(jīng)驗(不會有類似的錯誤)和有豐富的排錯經(jīng)驗(通過仿真能夠很快發(fā)現(xiàn)問題)。<BR><BR>二、初學(xué)者在編寫C源程序時常見錯誤及分析<BR><BR>1、忘記定義變量就使用<BR><BR>例如:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>x=3;<BR><BR>y=x;<BR><BR>}<BR><BR>在上式中看似正確,實際上卻沒有定義變量x和y的類型。C語言規(guī)定,所有的變量必須先定義,后使用。因此在函數(shù)開頭必須有定義變量x和y的語句,應(yīng)改為:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>int&nbsp;x,y;<BR><BR>x=3;<BR><BR>y=x;<BR><BR>}<BR><BR>2、變量沒有賦值初就直接使用。<BR><BR>例如:<BR><BR>unsigned&nbsp;int&nbsp;addition&nbsp;(unsigned&nbsp;int&nbsp;n)<BR><BR>{<BR><BR>unsigned&nbsp;int&nbsp;i;<BR><BR>unsigned&nbsp;int&nbsp;sum;<BR><BR>for&nbsp;(i=0;i&lt;n;i++)<BR><BR>sum+=i;<BR><BR>return&nbsp;(sum);<BR><BR>}<BR><BR>上例中本意是計算1到n之間整數(shù)的累加和,但是由于sum沒有賦初值,sum中的值是不確定的,因此得不到正確的結(jié)果。應(yīng)改為如下:<BR><BR>unsigned&nbsp;int&nbsp;addition&nbsp;(unsigned&nbsp;int&nbsp;n)<BR><BR>{<BR><BR>unsigned&nbsp;int&nbsp;i;<BR><BR>unsigned&nbsp;int&nbsp;sum=0;<BR><BR>for&nbsp;(i=0;i&lt;n;i++)<BR><BR>sum+=i;<BR><BR>return&nbsp;(sum);<BR><BR>}<BR><BR>或者將sum定義為全局變量(全局變量在初始化時自動賦值“0”)。<BR><BR>unsigned&nbsp;int&nbsp;sum;<BR><BR>unsigned&nbsp;int&nbsp;addition&nbsp;(unsigned&nbsp;int&nbsp;n)<BR><BR>{<BR><BR>unsigned&nbsp;int&nbsp;i;<BR><BR>for&nbsp;(i=0;i&lt;n;i++)<BR><BR>sum+=i;<BR><BR>return&nbsp;(sum);<BR><BR>}<BR><BR>3、輸入輸出的數(shù)據(jù)類型與所用格式說明符不一致<BR><BR>例如:<BR><BR>main&nbsp;(&nbsp;)<BR><BR>{<BR><BR>int&nbsp;a=3,b=4.5;<BR><BR>printf("%f&nbsp;%d\n",a,b);<BR><BR>}<BR><BR>在上例中,a與b變量錯位,但編譯時并不給出出錯信息,輸出結(jié)果為:<BR><BR>0.000000&nbsp;&nbsp;16402<BR><BR>它們并不是按賦值的規(guī)則進行轉(zhuǎn)換,如把3轉(zhuǎn)換成3.0,把4.5轉(zhuǎn)換成4,而是將存儲單元中的數(shù)據(jù)按格式符的要求的寬度直接輸出,如b占4個字節(jié)卻用“%d”說明,則只有最后兩個字節(jié)中的數(shù)據(jù)當(dāng)成一個整數(shù)輸出,a也相同,將a地址前兩個字節(jié)(并不屬于a)與變量a的兩個字節(jié)當(dāng)成一個4個字節(jié)的浮點數(shù)輸出。<BR><BR>4、沒有注意數(shù)據(jù)的數(shù)值范圍<BR><BR>8位單片機適用的C編譯器,對字符型變量分配一個字節(jié),對整型變量分配二個字節(jié),因此有數(shù)值范圍的問題。有符號的字符變量的數(shù)值范圍為-128~127,有符號的整型變量的數(shù)值范圍為-32768~32767。其它類型變量的范圍這里就不再一一列舉,請讀者參見相應(yīng)編譯器的使用手冊。<BR><BR>例如:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>char&nbsp;x;<BR><BR>x=300;<BR><BR>}<BR><BR>在上例中,有很多讀者會認為x的值就是300,實際上卻是錯誤的。<BR><BR>300的二進制為0b100101100,賦值給x時,將賦值最后的8位,高位截去,因此x的值實際上為0b101100(即整數(shù)44)。<BR><BR>如果將500賦給一個有符號的字符型變量時,變量內(nèi)存儲的值還會變成負數(shù),由讀者自行分析原因。<BR><BR>5、輸入變量時忘記使用地址符號<BR><BR>常見是忘記使用地址符:<BR><BR>例如:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>int&nbsp;a,b;<BR><BR>scanf&nbsp;("%d%d",a,b);<BR><BR>}<BR><BR>應(yīng)改為:<BR><BR>scanf&nbsp;("%d%d",&amp;a,&amp;b);<BR><BR>6、輸入時數(shù)組的組織方式與要求不符<BR><BR>scanf&nbsp;("%d&nbsp;%d",a,b);<BR><BR>如果輸入數(shù)據(jù)格式為:<BR><BR>3,4<BR><BR>則是錯誤的,兩個數(shù)據(jù)之間應(yīng)用空格分來分隔,應(yīng)為:<BR><BR>3&nbsp;4<BR><BR>7、誤把“=”作為關(guān)系運算符“等于”<BR><BR>在數(shù)學(xué)和其它高級語言中,都是把“=”作為關(guān)系運算符“等于”,因此容易將程序誤寫為:<BR><BR>if&nbsp;(a=b)<BR><BR>c=0;<BR><BR>else&nbsp;<BR><BR>&nbsp;&nbsp;&nbsp;c=1;<BR><BR>在上例中,本意是如果a等于b,則c=0,否則c=1。但C編譯系統(tǒng)卻認為將b賦值給a,并且如果a不等于0,則c=0,當(dāng)a等于0,則c=1,這與原設(shè)計的意圖完全不同。應(yīng)將條件表過式更改為:<BR><BR>a==b<BR><BR>8、語句后面漏加分號<BR><BR>C語言規(guī)定語句末尾必須有分號,分號是C語句不可缺少的一部分,<BR><BR>例如:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>unsigned&nbsp;int&nbsp;i,sum;<BR><BR>sum=0;&nbsp;<BR><BR>for&nbsp;(i=0;i&lt;10;i++)<BR><BR>{sum+=i}<BR><BR>}<BR><BR>很多初學(xué)者認為用大括號括起就不必加分號,這是錯誤的,即使該語句用大括號括起來,也必須加入分號。在復(fù)合語句中,初學(xué)者往往容易漏寫最后一個分號。上例應(yīng)改為如下形式:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>unsigned&nbsp;int&nbsp;i,sum;<BR><BR>sum=0;&nbsp;<BR><BR>for&nbsp;(i=0;i&lt;10;i++)<BR><BR>{sum+=i;}<BR><BR>}<BR><BR>當(dāng)漏寫分號而出錯,光標(biāo)將停留在漏寫分號的下一行。<BR><BR>9、在不該加分號的地方加了分號<BR><BR>#include&nbsp;"io8515v.h";<BR><BR>由于偽指令不是C程序語句,因此后面不能加分號。<BR><BR>初學(xué)者也常在判斷語句的條件表達式后面加入分號,<BR><BR>例如:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>unsigned&nbsp;int&nbsp;i,sum;<BR><BR>sum=0;&nbsp;<BR><BR>for&nbsp;(i=0;i&lt;10;i++);<BR><BR>sum+=i;<BR><BR>}<BR><BR>在上例中,在for的表達式后面中入分號,則C編譯認為循環(huán)體是一個空操作,這與設(shè)計者的本意不符。<BR><BR>10、對應(yīng)該有花括號的復(fù)合語句,忘記加花括號<BR><BR>例如:<BR><BR>unsigned&nbsp;char&nbsp;i=1;<BR><BR>unsigned&nbsp;int&nbsp;sum=0;<BR><BR>while&nbsp;(i&lt;=100)<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;sum=sum+i;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;i++;<BR><BR>我們在前面舉過這個例子,應(yīng)改為:<BR><BR>unsigned&nbsp;char&nbsp;i=1;<BR><BR>unsigned&nbsp;int&nbsp;sum=0;<BR><BR>while&nbsp;(i&lt;=100)<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;sum=sum+i;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;i++;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>11、括號不配對<BR><BR>當(dāng)一個復(fù)合語句中使用多層括號時,常會出現(xiàn)這類錯誤;也常出現(xiàn)大括號不配對的現(xiàn)象,都是粗心所致。<BR><BR>例如:<BR><BR>while&nbsp;((c=getchar&nbsp;()!='a')<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;putchar(c);<BR><BR>少了一個右括號。<BR><BR>12、沒有注意大寫字母和小寫字母代表不同的標(biāo)識符<BR><BR>例如:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>int&nbsp;a,b,c;<BR><BR>a=0;<BR><BR>B=1;<BR><BR>C=a+B;<BR><BR>}<BR><BR>在上例中,C編譯系統(tǒng)會提示變量B、C沒有定義。應(yīng)改為:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>int&nbsp;a,B,C;<BR><BR>a=0;<BR><BR>B=1;<BR><BR>C=a+B;<BR><BR>}<BR><BR>13、引用數(shù)組元素時誤用圓括號<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>int&nbsp;i,a[10];<BR><BR>for&nbsp;(i=0;i&lt;10;i++)<BR><BR>&nbsp;&nbsp;&nbsp;scanf&nbsp;("%d",a(i));<BR><BR>}<BR><BR>通常情況下,C程序編譯出錯,但是如果恰好有一個函數(shù)a(),則通常情況都可以通過編譯,那查起錯誤來就更麻煩了。<BR><BR>14、引用數(shù)組元素超界<BR><BR>例如:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>int&nbsp;i,a[5]={1,2,3,4,5};<BR><BR>for&nbsp;(i=1;i&lt;=5;i++)<BR><BR>&nbsp;&nbsp;&nbsp;printf&nbsp;("%d",a[i]);<BR><BR>}<BR><BR>上例中,本意是想輸出數(shù)組a的全部元素,實際上,定義的數(shù)組a[5]中,只有a[0]~a[4],5個元素,并不存在a[5]。應(yīng)改為如下形式:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>int&nbsp;i;<BR><BR>int&nbsp;a[5]={1,2,3,4,5};<BR><BR>for&nbsp;(i=0;i&lt;5;i++)<BR><BR>&nbsp;&nbsp;&nbsp;printf&nbsp;("%d",a[i]);<BR><BR>}<BR><BR>15、對二維或多維數(shù)組定義和引用的方式不對<BR><BR>例如:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>int&nbsp;a[5,4],<BR><BR>/*&nbsp;&nbsp;其它程序&nbsp;&nbsp;*/<BR><BR>}<BR><BR>在C語中,對二維數(shù)組和多維數(shù)組在定義和引用時必須將每一維數(shù)組中的數(shù)據(jù)分別用方括號括起來,因此定義一個二維數(shù)組,應(yīng)改為:<BR><BR>int&nbsp;a[5][4];<BR><BR>16、誤以為數(shù)組名代表整個數(shù)組<BR><BR>例如:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>int&nbsp;a[5]={1,2,3,4,5};<BR><BR>printf&nbsp;("%d,%d,%d,%d,%d",a);<BR><BR>}<BR><BR>在上例中,本意是輸出數(shù)組a中的全部元素,但是數(shù)組名a卻只是代表數(shù)組的首地址,并不能代表數(shù)組中的所有元素,因此并不能得到所需的結(jié)果,應(yīng)改為:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>int&nbsp;a[5]={1,2,3,4,5};<BR><BR>printf&nbsp;("%d,%d,%d,%d,%d",a[0],a[1],a[2],a[3],a[4]);<BR><BR>}<BR><BR>17、混淆字符數(shù)組與字符指針的區(qū)別<BR><BR>例如:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>char&nbsp;str[10];<BR><BR>str="ICCAVR";<BR><BR>printf&nbsp;("%s\n",str);<BR><BR>}<BR><BR>在上例中,編譯必定出錯。因為str[10]是一個數(shù)組,str代表數(shù)組名,是一個常量,不能被賦值,可將str改為指針變量,將字符串"ICCAVR"的首地址賦值給指針變量str,然后在Printf函數(shù)中輸出字符串。如下:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>char&nbsp;*str;<BR><BR>str="ICCAVR";<BR><BR>printf&nbsp;("%s\n",str);<BR><BR>}<BR><BR>如果堅持要使用數(shù)組,一種方式為初始化時賦值,另一種只能在程序中一個一個元素進行賦值。分別如下:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>char&nbsp;str[10]="ICCAVR";<BR><BR>printf&nbsp;("%s\n",str);<BR><BR>}<BR><BR>或<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>char&nbsp;str[10];<BR><BR>str[0]='I';str[1]='C';str[2]='C';str[3]='A';str[4]='V';<BR><BR>str[5]='R';str[6]='\0';str[7]='\0';str[8]='\0';str[9]='\0';<BR><BR>printf&nbsp;("%s\n",str);<BR><BR>}<BR><BR>要注意:<BR><BR>char&nbsp;str[10]="ICCAVR";<BR><BR>和<BR><BR>char&nbsp;str[10];<BR><BR>str="ICCAVR";<BR><BR>是不相同的。<BR><BR>18、在引用指針變量之前沒有對它賦值<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>char&nbsp;*p;<BR><BR>scanf&nbsp;("%s",p);<BR><BR>/*&nbsp;&nbsp;用戶程序&nbsp;&nbsp;*/<BR><BR>}<BR><BR>沒有給指針變量賦值就使用它,由于指針變量p的值不確定,因此有可能誤指向有用的存儲空間,導(dǎo)致程序運行出錯。應(yīng)當(dāng)改為:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>char&nbsp;*p,str[20];<BR><BR>p=str;<BR><BR>scanf&nbsp;("%s",p);<BR><BR>/*&nbsp;&nbsp;用戶程序&nbsp;&nbsp;*/<BR><BR>}<BR><BR>19、switch語句的各分支漏寫了break語句<BR><BR>例如:<BR><BR>switch&nbsp;(time)<BR><BR>{<BR><BR>case&nbsp;0&nbsp;:&nbsp;a=0;<BR><BR>case&nbsp;1&nbsp;:&nbsp;a=0;<BR><BR>case&nbsp;2&nbsp;:&nbsp;a=2;<BR><BR>defult&nbsp;:&nbsp;a=3;<BR><BR>}<BR><BR>上例中,本意是根據(jù)time的值來決定a的值,但是最后程序執(zhí)行的結(jié)果都一樣(a=3),因為漏寫了break語句,程序?qū)南鄳?yīng)的case開始順序執(zhí)行,應(yīng)改為:<BR><BR>switch&nbsp;(time)<BR><BR>{<BR><BR>case&nbsp;0&nbsp;:&nbsp;a=0;&nbsp;break;<BR><BR>case&nbsp;1&nbsp;:&nbsp;a=0;&nbsp;break;<BR><BR>case&nbsp;2&nbsp;:&nbsp;a=2;&nbsp;break;<BR><BR>defult&nbsp;:&nbsp;a=3;<BR><BR>}<BR><BR>20、混淆了字符和字符串的表示形式<BR><BR>例如:<BR><BR>char&nbsp;sex;<BR><BR>sex="M";<BR><BR>由于sex是字符變量,只能存放一個字符,用單引號括起來的是字符常量,才能賦值給一個字符型變量,而用雙引號括起來的是字符串常量,它包括兩個字符“M”和“\0”,無法存放到字符變量中。應(yīng)改為:<BR><BR>char&nbsp;sex;<BR><BR>sex='M'<BR><BR>21、使用自加(++)和自減(--)時出錯<BR><BR>例如:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>int&nbsp;*p,a[5]={0,1,2,3,4};<BR><BR>p=a<BR><BR>printf&nbsp;("%d",*p++);<BR><BR>}<BR><BR>在上例中,“*p++”本意是指p加1,即指向第1個元素a[1]外,然后輸出第一個元素a[1]的值1。但實際上是先執(zhí)行p++,先使用p的原值,使用后再加1,因此實際執(zhí)行結(jié)果是輸出a[0]的值。應(yīng)改為如下:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>int&nbsp;*p,a[5]={0,1,2,3,4};<BR><BR>p=a;<BR><BR>printf&nbsp;("%d",*(++p));<BR><BR>}<BR><BR>說明:要注意區(qū)別p++、*p++、*(++p)和(*p)++的區(qū)別,詳見“2.7.4&nbsp;數(shù)組的指針和指向數(shù)組的指針變量”一節(jié)的介紹。<BR><BR>22、所調(diào)用的函數(shù)在調(diào)用語句之后定義,但在調(diào)用之前沒有說明<BR><BR>例如:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>float&nbsp;x=2.0,y=6.0,z;<BR><BR>z=max(x,y);<BR><BR>printf&nbsp;("%f",z);<BR><BR>}<BR><BR>float&nbsp;max&nbsp;(float&nbsp;x,float&nbsp;y)<BR><BR>{<BR><BR>return&nbsp;(z=x&gt;y&nbsp;?&nbsp;x:y)<BR><BR>}<BR><BR>在上例的程序中,max函數(shù)在main函數(shù)之后定義,在調(diào)用之前又沒有說明,因此出錯。應(yīng)在調(diào)用前對函數(shù)進行說明:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>float&nbsp;max&nbsp;(float&nbsp;x,float&nbsp;y);<BR><BR>float&nbsp;x=2.0,y=6.0,z;<BR><BR>z=max(x,y);<BR><BR>printf&nbsp;("%f",z);<BR><BR>}<BR><BR>float&nbsp;max&nbsp;(float&nbsp;x,float&nbsp;y)<BR><BR>{<BR><BR>return&nbsp;(x&gt;y&nbsp;?&nbsp;x:y);<BR><BR>}<BR><BR>也可以將函數(shù)max在函數(shù)main之前定義。<BR><BR>23、誤認為形參值的改變會影響實參的值<BR><BR>例如:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>int&nbsp;x=3,y=4;<BR><BR>swap(x,y);<BR><BR>printf&nbsp;("%d,%d",x,y);<BR><BR>}<BR><BR>int&nbsp;swap&nbsp;(int&nbsp;x,int&nbsp;y)<BR><BR>{<BR><BR>int&nbsp;z;<BR><BR>z=x;x=y;y=z;<BR><BR>}<BR><BR>在上例中,設(shè)計者的意圖本想是利用swap函數(shù)交換x和y的值,但是由于實參和形參之間單向傳遞,在函數(shù)swap中改變了x和y值,main中的x和y是不會改變的。可以改為使用指針的形式,如下:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>int&nbsp;x=3,y=4;<BR><BR>int&nbsp;*p1,*p2;<BR><BR>p1=&amp;x&nbsp;&nbsp;p2=&amp;y;<BR><BR>swap(p1,p2);<BR><BR>printf&nbsp;("%d,%d",x,y);<BR><BR>}<BR><BR>int&nbsp;swap&nbsp;(int&nbsp;*p1,int&nbsp;*p2)<BR><BR>{<BR><BR>int&nbsp;z;<BR><BR>z=*p1;*p1=*p2;*p2=z;<BR><BR>}<BR><BR>說明:雖然函數(shù)swap在調(diào)用函數(shù)之后定義,而且在函數(shù)main調(diào)用之前又沒有說明,但是由于swap返回值為整型,C語言規(guī)則返回值為整形的函數(shù)在調(diào)用之前可以不必說明,因此本例中是符合C語法規(guī)定的。<BR><BR>24、函數(shù)的實參和形參類型不致。<BR><BR>還是使用上例:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>int&nbsp;x=3,y=4;<BR><BR>int&nbsp;*p1,*p2;<BR><BR>p1=&amp;x&nbsp;&nbsp;p2=&amp;y;<BR><BR>swap(p1,p2);<BR><BR>printf&nbsp;("%d,%d",x,y);<BR><BR>}<BR><BR>int&nbsp;swap&nbsp;(int&nbsp;p1,int&nbsp;p2)<BR><BR>{<BR><BR>int&nbsp;z;<BR><BR>z=p1;p1=p2;p2=z;<BR><BR>}<BR><BR>C要求實參與形參的類型一致,一個為指向整型變量的指針,另一個為整型變量,類型不同,因此編譯出錯。<BR><BR>25、不同類型的指針混用<BR><BR>例如:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>char&nbsp;x=3,*p1;<BR><BR>int&nbsp;*p2;<BR><BR>p1=&amp;x;<BR><BR>p2=p1;<BR><BR>printf&nbsp;("%d,%d",x,y);<BR><BR>}<BR><BR>在上例中,設(shè)計者本意是想將指針p1所指的值賦p2,但是由于p1與p2所指向的類型不同,不能賦值。在賦值時必須進行強制類型轉(zhuǎn)換。如:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>char&nbsp;x=3,*p1;<BR><BR>int&nbsp;*p2;<BR><BR>p1=&amp;x;<BR><BR>p2=(int&nbsp;*)p1;<BR><BR>printf&nbsp;("%d,%d",*p1,*p2);<BR><BR>}<BR><BR>指向不同類型的指針變量進行強制轉(zhuǎn)換后賦值,在C中是常用的,例如,用malloc函數(shù)開辟的數(shù)據(jù)存儲單元,函數(shù)的返回值是一個空指針(void),需要用強制轉(zhuǎn)換成指向所需存儲類型,如指向一個結(jié)構(gòu)體,用以組成一個鏈表:<BR><BR>struct&nbsp;str<BR><BR>&nbsp;&nbsp;&nbsp;{<BR><BR>&nbsp;&nbsp;&nbsp;int&nbsp;a;<BR><BR>&nbsp;&nbsp;&nbsp;struct&nbsp;str&nbsp;*next;<BR><BR>&nbsp;&nbsp;&nbsp;}*p1;<BR><BR>/*&nbsp;&nbsp;&nbsp;用戶程序列&nbsp;&nbsp;*/<BR><BR>p1=(struct&nbsp;str&nbsp;*)malloc&nbsp;(size_t,size)<BR><BR>在ICCAVR中,malloc函數(shù)返回的是void類型的指針,將其強制轉(zhuǎn)換為struct&nbsp;str類型的結(jié)構(gòu)體指針。<BR><BR>26、混淆數(shù)組與指針變量的區(qū)別<BR><BR>例如:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>int&nbsp;i,a[5];<BR><BR>for&nbsp;(i=0;i&lt;5;i++)<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;scanf&nbsp;("%d",a++);<BR><BR>}<BR><BR>在上例中,設(shè)計者意圖通過a++的操作,引用a數(shù)組的不同元素。由于C規(guī)定數(shù)組名代表數(shù)組的首地址,它的值是一個常量,因此用a++是錯誤的。應(yīng)改為用指針變量來實現(xiàn),如:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>int&nbsp;i,a[5],*p;<BR><BR>p=a;<BR><BR>for&nbsp;(i=0;i&lt;5;i++)<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;scanf&nbsp;("%d",p++);<BR><BR>}<BR><BR>或:<BR><BR>main&nbsp;()<BR><BR>{<BR><BR>int&nbsp;a[5],*p;<BR><BR>for&nbsp;(p=a;p&lt;a+5;p++)<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;scanf&nbsp;("%d",p);<BR><BR>}<BR><BR>27、混淆結(jié)構(gòu)體類型與結(jié)構(gòu)體變量的區(qū)別<BR><BR>例如:<BR><BR>struct&nbsp;worker<BR><BR>&nbsp;&nbsp;&nbsp;{<BR><BR>&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;num;<BR><BR>&nbsp;&nbsp;&nbsp;char&nbsp;name[20];<BR><BR>&nbsp;&nbsp;&nbsp;};<BR><BR>worker.num=1;<BR><BR>在上例中,只是說明了一種struct&nbsp;worker的結(jié)構(gòu),但是C編譯器并沒有為這種類型的結(jié)構(gòu)體變量開辟存儲空間,因此不能對結(jié)構(gòu)體類型賦值。應(yīng)用該類型定義了一個結(jié)體類型的變量后,才能對這個變量賦值,應(yīng)改為:<BR><BR>struct&nbsp;worker<BR><BR>&nbsp;&nbsp;&nbsp;{<BR><BR>&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;num;<BR><BR>&nbsp;&nbsp;&nbsp;char&nbsp;name[20];<BR><BR>&nbsp;&nbsp;&nbsp;};<BR><BR>struct&nbsp;worker&nbsp;work;<BR><BR>work.num=1;<BR><BR></FONT></TD></TR>
                          <TR>
                            <TD height=20></TD></TR>
                          <TR>
                            <TD class=red_3 align=right>→&nbsp;<A 
                              href="javascript:self.close()">『關(guān)閉窗口』</A></TD></TR></TBODY></TABLE></TD></TR>
                    <TR>
                      <TD width=22 background=C語言常見錯誤.files/view_b.gif 
                      height=5></TD>
                      <TD></TD></TR>
                    <TR>
                      <TD background=C語言常見錯誤.files/view_line.gif height=1></TD>
                      <TD bgColor=#666666 height=1></TD></TR></TBODY></TABLE></TD></TR>
              <TR>
                <TD height=10></TD></TR>
              <TR>
                <TD>
                  <TABLE width="100%" border=0>
                    <TBODY>
                    <TR>
                      <TD class=htd width="25%">&nbsp;發(fā)布人:<A class=1 
                        title="查看 沈文 的詳細資料" 
                        href="http://www.fjmcu.com/user_view.asp?username=%C9%F2%CE%C4" 
                        target=_blank>沈文</A><BR>&nbsp;[ <A 
                        href="http://www.fjmcu.com/user_put.asp?action=article">→ 
                        我要發(fā)表文章</A> ] </TD>
                      <TD class=htd width="75%">上篇文章:<A 
                        href="http://www.fjmcu.com/article_view.asp?id=11">《入門指導(dǎo)》一書的前言</A><BR>下篇文章:<A 
                        href="http://www.fjmcu.com/article_view.asp?id=13">C源程序優(yōu)化</A> 
                      </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
            <TABLE class=tf cellSpacing=0 cellPadding=0 width="96%" border=0>
              <TBODY>
              <TR>
                <TD height=5></TD></TR>
              <TR>
                <TD background=C語言常見錯誤.files/bg_dian.gif height=1></TD></TR>
              <TR>
                <TD align=middle bgColor=#ededed height=20>
                  <TABLE width="98%" border=0>
                    <TBODY>
                    <TR>
                      <TD class=red_3><B>→&nbsp;主題所屬分類:</B>&nbsp;&nbsp;<A 
                        href="http://www.fjmcu.com/article_list.asp?c_id=3">站長原創(chuàng)</A>&nbsp;→&nbsp;<A 
                        href="http://www.fjmcu.com/article_list.asp?c_id=3&amp;s_id=7">《入門指導(dǎo)》專題</A></TD>
                      <TD class=red_3 align=right></TD></TR></TBODY></TABLE></TD></TR>
              <TR>
                <TD background=C語言常見錯誤.files/bg_dian.gif height=1></TD></TR>
              <TR>
                <TD bgColor=#ededed>
                  <TABLE width="100%" border=0>
                    <TBODY>
                    <TR vAlign=top align=middle>
                      <TD width="50%">
                        <TABLE height=2 width="100%">
                          <TBODY>
                          <TR>
                            <TD></TD></TR></TBODY></TABLE>
                        <TABLE cellSpacing=0 cellPadding=0 width="96%" 
                          border=0><TBODY>
                          <TR>
                            <TD align=middle>
                              <TABLE height=2 width="100%">
                                <TBODY>
                                <TR>
                                <TD></TD></TR></TBODY></TABLE>
                              <TABLE cellSpacing=0 cellPadding=0 width="100%" 
                              border=0>
                                <TBODY>
                                <TR>
                                <TD vAlign=bottom background="" height=20>
                                <TABLE cellSpacing=0 cellPadding=0 width="100%" 
                                border=0>
                                <TBODY>
                                <TR>
                                <TD vAlign=top width=20><IMG 
                                src="C語言常見錯誤.files/bar_15_left.gif" 
                                border=0></TD>
                                <TD background=C語言常見錯誤.files/bar_15_bg.gif>
                                <TABLE cellSpacing=0 cellPadding=0 width="100%" 
                                border=0>
                                <TBODY>
                                <TR>
                                <TD>
                                <TABLE cellSpacing=0 cellPadding=0 border=0>
                                <TBODY>
                                <TR>
                                <TD>&nbsp;<FONT 
                                class=end><B>熱門文章</B></FONT></TD></TR></TBODY></TABLE></TD>
                                <TD align=right></TD></TR></TBODY></TABLE></TD>
                                <TD width=20><IMG 
                                src="C語言常見錯誤.files/bar_15_right.gif" 
                                border=0></TD></TR></TBODY></TABLE></TD></TR>
                                <TR>
                                <TD align=middle bgColor=#f7f7f7>
                                <TABLE width="100%" border=0>
                                <TBODY>
                                <TR>
                                <TD>
                                <TABLE class=tf width="100%" border=0>
                                <TBODY>
                                <TR>
                                <TD height=18><IMG src="C語言常見錯誤.files/jt0.gif" 
                                align=absMiddle border=0>&nbsp;<A 
                                title="文章標(biāo)題:開關(guān)電源測試規(guī)范<br>發(fā) 布 人:沈文<br>整理時間:2004-5-7 21:49:18" 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
福利视频网站一区二区三区| 欧美美女网站色| 久久99国产精品久久99 | 韩国成人在线视频| 亚洲电影一区二区| 国产午夜精品福利| 国产亚洲欧美一区在线观看| 樱桃视频在线观看一区| 一区二区三区在线观看欧美| 亚洲图片欧美色图| 粉嫩绯色av一区二区在线观看| 欧美三级中文字幕在线观看| 欧美理论在线播放| 日韩久久一区二区| 天天亚洲美女在线视频| 国产真实乱子伦精品视频| 欧美无砖砖区免费| 日韩欧美综合在线| 国产精品沙发午睡系列990531| 欧美国产日韩在线观看| 亚洲靠逼com| 高清成人免费视频| 亚洲精品一区二区三区精华液| 日本一区二区三区高清不卡| 亚洲精品日日夜夜| 成人高清免费在线播放| 欧美性欧美巨大黑白大战| 亚洲视频一区二区在线观看| 国产福利电影一区二区三区| 91影院在线观看| 精品国产一区二区三区四区四| 亚洲成a人在线观看| 91免费观看在线| 亚洲日本韩国一区| 成人福利视频在线| 中文字幕一区二区三区精华液| 亚洲国产电影在线观看| 国产成人免费在线| 精品国产123| 国产真实乱偷精品视频免| 精品99久久久久久| 国产一区二区三区综合| 色狠狠综合天天综合综合| 欧美精品一区二区三区四区 | av网站一区二区三区| 欧美日韩一区二区在线视频| 亚洲欧美一区二区三区孕妇| 男男成人高潮片免费网站| 喷水一区二区三区| 日韩一区二区三区免费观看| 久久成人免费日本黄色| 欧美四级电影在线观看| 亚洲网友自拍偷拍| 欧美一区二区视频在线观看2022 | 国产精品每日更新在线播放网址| 国产99一区视频免费| 中文字幕在线观看不卡视频| 色老头久久综合| 麻豆91在线观看| 欧美日韩和欧美的一区二区| 国产精品传媒在线| 国产一区在线视频| 中文字幕一区二区三区色视频| 色噜噜狠狠色综合欧洲selulu| 日韩精彩视频在线观看| 欧美中文字幕亚洲一区二区va在线| 国产精品午夜免费| 欧美亚洲一区二区三区四区| 美国精品在线观看| 国产精品福利一区二区| 欧美亚洲综合色| 国产麻豆精品视频| 亚洲一区二区三区四区在线免费观看| 国产成人亚洲综合色影视| 悠悠色在线精品| 久久久亚洲精品石原莉奈| 狠狠色综合日日| 亚洲乱码中文字幕| 欧美精品一区二区三区蜜桃| 91原创在线视频| 国产一区二区不卡| 亚洲午夜久久久久中文字幕久| 精品精品国产高清a毛片牛牛| 99精品欧美一区| 亚洲乱码国产乱码精品精98午夜| 日韩网站在线看片你懂的| 成人avav影音| 狠狠久久亚洲欧美| 亚洲一区二区三区四区在线观看 | 韩国精品一区二区| 亚洲国产精品久久久男人的天堂| 久久这里只精品最新地址| 国产一区二区不卡老阿姨| 亚洲18女电影在线观看| 国产精品剧情在线亚洲| xnxx国产精品| 91超碰这里只有精品国产| 蜜桃传媒麻豆第一区在线观看| 亚洲欧美日韩国产中文在线| 久久―日本道色综合久久| 欧美日产在线观看| 91行情网站电视在线观看高清版| 精品一区二区日韩| 午夜电影网亚洲视频| 亚洲综合无码一区二区| 国产精品色呦呦| 中文字幕欧美日韩一区| wwww国产精品欧美| 欧美大黄免费观看| 国产999精品久久| 国产乱子轮精品视频| 国产午夜精品一区二区三区嫩草| 精品久久久久久久一区二区蜜臀| 国产高清不卡一区| 国产精品一品二品| 国产剧情一区二区| 国产精品资源在线| 国产在线看一区| 国产专区欧美精品| 国产成人一级电影| 99久久久国产精品| 99久久精品情趣| 99久久99久久久精品齐齐| 972aa.com艺术欧美| 99久久精品国产精品久久| 91丝袜高跟美女视频| 日本福利一区二区| 欧美三级电影网| 欧美一区二区美女| 欧美成人猛片aaaaaaa| 亚洲精品一区二区三区影院| 久久久亚洲精华液精华液精华液| 国产三级精品在线| 中文字幕在线视频一区| 亚洲乱码中文字幕综合| 午夜电影网一区| 韩国视频一区二区| 成人av网站大全| 色av成人天堂桃色av| 欧美剧在线免费观看网站| 日韩一区二区在线免费观看| 国产三级久久久| 亚洲黄色小视频| 日韩**一区毛片| 亚洲一二三四久久| 偷偷要91色婷婷| 国内外成人在线| av动漫一区二区| 在线观看三级视频欧美| 欧美一级一级性生活免费录像| 日韩免费观看高清完整版在线观看| 久久久久久免费毛片精品| 中文字幕制服丝袜一区二区三区 | 久久综合色婷婷| 欧美韩国一区二区| 午夜久久福利影院| 国产精品一区二区在线观看网站| 97se亚洲国产综合自在线| 欧美日韩国产一区| 欧美国产一区二区在线观看| 丝袜亚洲另类欧美综合| 国产凹凸在线观看一区二区 | 成人小视频免费在线观看| 婷婷开心激情综合| 国产suv精品一区二区6| 欧美日韩精品高清| 欧美极品美女视频| 日日夜夜免费精品| 成人丝袜高跟foot| 欧美一级欧美三级| 亚洲精品国产一区二区精华液| 久久成人免费网| 成人丝袜18视频在线观看| 日韩一卡二卡三卡国产欧美| 日本乱码高清不卡字幕| 日韩欧美国产精品| 一区二区三区四区视频精品免费 | 在线日韩一区二区| 久久精品亚洲国产奇米99| 日本va欧美va欧美va精品| av电影在线观看完整版一区二区| 日韩免费看的电影| 五月天精品一区二区三区| 色综合中文字幕| 色婷婷亚洲一区二区三区| 在线视频欧美区| 亚洲欧洲成人精品av97| 国产真实乱对白精彩久久| 7777精品伊人久久久大香线蕉的| 亚洲三级在线观看| 成人ar影院免费观看视频| 国产三级欧美三级| 国产一区二区影院| 久久久久久久av麻豆果冻| 久久99精品网久久| 日韩欧美在线不卡| 免费观看在线色综合| 日韩三级中文字幕| 蜜臀av一区二区在线观看| 欧美一卡在线观看|