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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? c.txt

?? C語言編程常見問題解答 這個帖子將不斷擴充、更新 羅列大部分C語言編程的常見問題 希望各位觀眾支持幫助 畢竟一人之力太有限
?? TXT
?? 第 1 頁 / 共 5 頁
字號:
以文本方式查看主題

-  大學生科技協會  (http://glietkx.home2.cernet.cn/index.asp)
--  C/C++  (http://glietkx.home2.cernet.cn/list.asp?boardid=2)
----  C語言編程常見問題解答  (http://glietkx.home2.cernet.cn/dispbbs.asp?boardid=2&id=167)

--------------------------------------------------------------------------------
 
--  作者:PrOve
--  發布時間:2005-4-5 22:59:22

--  C語言編程常見問題解答

這個帖子將不斷擴充、更新 羅列大部分C語言編程的常見問題



希望各位觀眾支持幫助 畢竟一人之力太有限



小弟在此先謝過!

--------------------------------------------------------------------------------
 
--  作者:PrOve
--  發布時間:2005-4-5 23:01:44

--  
1.  tch語句必須包含default分支嗎?
    不,但是為了進行錯誤檢查或邏輯檢查,還是應該tch語句中加入default分支。例如,下tch語句完全合法:
{
      case tyt:
      case \'y\': printf ( " You answered YES ! \\n" )
           break
      case \'N\':
      case \'n\': printf ("You answered NO!\\n");
           break
}

但是,如果一個未知字符被傳遞給這tch語句,會出現什么情況呢?這時,程序將沒有任何輸出。因此,最好還是加入一個default分支,以處理這種情況:

......
default: printf ("Unknown response : %d\\n", char_code);
          break
......

  此外,default分支能給邏輯檢查帶來很多方便。例如,如果tch語句來處理數目固定的條件,而且認為這些條件之外的值都屬于邏輯錯誤,那么可以加入一個default分支來辨識邏輯錯誤。請看下列:

void move_cursor (int direction)
{
    tch (direction)
     {
           case UP:     cursor_up()
                            break
           case DOWN:   cursor_down()
                            break
           case LEFT:   cursor_left ()
                            break
           case RIGHT:  cursor_ right ( )
                             break
           default:     printf ("Logic error on line number %ld!!! \\n",
                                     __ LINE__ )
                             break
     }
} 
--------------------------------------------------------------------------------
 
--  作者:PrOve
--  發布時間:2005-4-5 23:02:27

--  
2. switch語句的最后一個分支可以不要break語句嗎?
    盡管switch語句的最后一個分支不一定需要break語句,但最好還是在switch語句的每個分支后面加上break語句,包括最后一個分支。這樣做的主要原因是:你的程序很可能要讓另一個人來維護,他可能要增加一些新的分支,但沒有注意到最后一個分支沒有break語句,結果使原來的最后一個分支受到其后新增分支的干擾而失效。在每個分支后面加上break語句將防止發生這種錯誤并增強程序的安全性。此外,目前大多數優化編譯程序都會忽略最后一條break語句,所以加入這條語句不會影響程序的性能。 
--------------------------------------------------------------------------------
 
--  作者:PrOve
--  發布時間:2005-4-5 23:02:59

--  
3.除了在for語句中之外,在哪些情況下還要使用逗號運算符?
    逗號運算符通常用來分隔變量說明、函數參數、表達式以及for語句中的元素。下例給出了使用逗號的多種方式:
#include <stdio.h>
#include <stdlib.h>
void main(void);

void main ()
{
     / * Here, the comma operator is used to separate
          three variable declarations.  * /
     int i, j, k;
     / * Notice how you can use the comma operator to perform
          multiple initializations on the same line.  * /
     i=0, j=1, k=2;
printf("i= %d, j=%d, k= %d\\n", i, j, k);
     / * Here, the comma operator is used to execute three expressions
          in one line: assign k to i, increment j, and increment k.
          The value that i receives is always the rigbtmost expression.  * /
     i= ( j++, k++ );
     printf("i=%d, j=%d, k=%d\\n", i, j, k);
     / * Here, the while statement uses the comma operator to
          assign the value of i as well as test it.  * /
     while (i=(rand() % 100), i !=50)
        printf("i is %d, trying again... \\n", i)
     printf ("\\nGuess what? i is 50!\\n" )
}

請注意下述語句:
     i:(j++,k++)
    這條語句一次完成了三個動作,依次為:
    (1)把k值賦給i。這是因為左值(lvaule)總是等于最右邊的參數,本例的左值等于k。注意,本例的左值不等于k++,因為k++是一個后綴自增表達式,在把k值賦給j之后k才會自增。如果所用的表達式是++k,則++k的值會被賦給i,因為++k是一個前綴自增表達式,k的自增發生在賦值操作之前。
    (2)j自增。
    (3)k自增。
    此外,還要注意看上去有點奇怪的while語句:
while (i=(rand() % 100), i !=50)
  printf("i is %d, trying again... \\n");

  這里,逗號運算符將兩個表達式隔開,while語句的每次循環都將計算這兩個表達式的值。逗號左邊是第一個表達式,它把0至99之間的一個隨機數賦給i;第二個表達式在while語句中更常見,它是一個條件表達式,用來判斷i是否不等于50。while語句每一次循環都要賦予i一個新的隨機數,并且檢查其值是否不等于50。最后,i將被隨機地賦值為50,而while語句也將結束循環。 
--------------------------------------------------------------------------------
 
--  作者:PrOve
--  發布時間:2005-4-5 23:03:30

--  
4.怎樣才能知道循環是否提前結束了?
    循環通常依賴于一個或多個變量,你可以在循環外檢查這些變量,以確保循環被正確執行。請看下例:

int x
char * cp[REQUESTED_BLOCKS]
/ * Attempt (in vain, I must add... )to
     allocate 512 10KB blocks in memory.  * /
for (x = 0;  x<REQUESTED_ BLOCKS ; x++ )
{
     cpi[x]= (char * ) malloc (10000,1)
     if (cp[x]= = (char * ) NULL)
           break
}
/ * If x is less than REQUESTED-BLOCKS,
     the loop has ended prematurely.  * /
if (x<REQUESTED_BLOCKS)
  printf ("Bummer ! My loop ended prematurely ! \\n" );

注意,如果上述循環執行成功,它一定會循環512次。緊接著循環的if語句用來測試循環次數,從而判斷循環是否提前結束。如果變量x的值小于512,就說明循環出錯了。 
--------------------------------------------------------------------------------
 
--  作者:PrOve
--  發布時間:2005-4-5 23:04:36

--  
5.運算符的優先級總能保證是“自左至右”或“自右至左”的順序嗎?
    對這個問題的簡單回答是:這兩種順序都無法保證。C語言并不總是自左至右或自右至左求值,一般說來,它首先求函數值,其次求復雜表達式的值,最后求簡單表達式的值。此外,為了進一步優化代碼,目前流行的大多數C編譯程序常常會改變表達式的求值順序。因此,你應該用括號明確地指定運算符的優先級。例如,請看下述表達式:
    a=b+c/d/function—call() * 5
    上述表達式的求值順序非常模糊,你很可能得不到所要的結果,因此,你最好明確地指定運算符的優先級:
    a=b+(((c/d)/function—call())* 5)
    這樣,就能確保表達式被正確求值,而且編譯程序不會為了優化代碼而重新安排運算符的優先級了。 
--------------------------------------------------------------------------------
 
--  作者:PrOve
--  發布時間:2005-4-5 23:08:11

--  
6.變量存儲在內存(memory)中的什么地方?
    變量可以存儲在內存中的不同地方,這依賴于它們的生存期。在函數外部定義的變量(全局變量或靜態外部變量)和在函數內部定義的static變量,其生存期就是程序運行的全過程,這些變量被存儲在數據段(datasegment)中。數據段是在內存中為這些變量留出的一段大小固定的空間,它分為兩部分,一部分用來存放初始化變量,另一部分用來存放未初始化變量。
    在函數內部定義的auto變量(沒有用關鍵字static定義的變量)的生存期從程序開始執行其所在的程序塊代碼時開始,到程序離開該程序塊時為止。作為函數參數的變量只在調用該函數期間存在。這些變量被存儲在棧(stack)中。棧是內存中的一段空間,開始很小,以后逐漸自動增大,直到達到某個預定義的界限。在象DOS這樣的沒有虛擬內存(virtual memory)的系統中,這個界限由系統決定,并且通常非常大,因此程序員不必擔心用盡棧空間。關于虛擬內存 的討論,請參見2.3。    
    第三種(也是最后一種)內存空間實際上并不存儲變量,但是可以用來存儲變量所指向的數據。如果把調用malloc()函數的結果賦給一個指針變量,那么這個指針變量將包含一塊動態分配的內存的地址,這塊內存位于一段名為“堆(heap)”的內存空間中。堆開始時也很小,但當程序員調用malloc()或calloc()等內存分配函數時它就會增大。堆可以和數據段或棧共用一個內存段(memorysegment),也可以有它自己的內存段,這完全取決于編譯選項和操作系統。
  與棧相似,堆也有一個增長界限,并且決定這個界限的規則與棧相同。 
--------------------------------------------------------------------------------
 
--  作者:PrOve
--  發布時間:2005-4-5 23:08:40

--  
7.變量必須初始化嗎?
    不。使用變量之前應該給變量一個值,一個好的編譯程序將幫助你發現那些還沒有被給定一個值就被使用的變量。不過,變量不一定需要初始化。在函數外部定義的變量或者在函數內部用static關鍵字定義的變量(被定義在數據段中的那些變量,見2.1)在沒有明確地被程序初始化之前都已被系統初始化為0了。在函數內部或程序塊內部定義的不帶static關鍵字的變量都是自動變量,如果你沒有明確地初始化這些變量,它們就會具有未定義值。如果你沒有初始化一個自動變量,在使用它之前你就必須保證先給它賦值。
    調用malloc()函數從堆中分配到的空間也包含未定義的數據,因此在使用它之前必須先進行初始化,但調用calloc()函數分配到的空間在分配時就已經被初始化為0了。 
--------------------------------------------------------------------------------
 
--  作者:PrOve
--  發布時間:2005-4-5 23:09:28

--  
8.什么時候應該使用register修飾符?它真的有用嗎?    
    register修飾符暗示編譯程序相應的變量將被頻繁使用,如果可能的話,應將其保存在CPU的寄存器中,以加快其存取速度。但是,使用register修飾符有幾點限制。
    首先,register變量必須是能被CPU寄存器所接受的類型。這通常意味著register變量必須是一個單個的值,并且其長度應小于或等于整型的長度。但是,有些機器的寄存器也能存放浮點數。
    其次,因為register變量可能不存放在內存中,所以不能用取址運算符“&”來獲取register變量的地址。如果你試圖這樣做,編譯程序就會報告這是一個錯誤。
    register修飾符的用處有多大還受其它一些規則的影響。因為寄存器的數量是有限的,而且某些寄存器只能接受特定類型的數據(如指針和浮點數),因此,真正能起作用的register修飾符的數目和類型都依賴于運行程序的機器,而任何多余的register修飾符都將被編譯程序所忽略。
    在某些情況下,把變量保存在寄存器中反而會降低運行速度,因為被占用的寄存器不能再用于其它目的,或—者變量被使用的次數不夠多,不足以抵消裝入和存儲變量所帶來的額外開銷。
    那么,什么時候應該使用register修飾符呢?回答是,對現有的大多數編譯程序來說,永遠不要使用register修飾符。早期的C編譯程序不會把變量保存在寄存器中,除非你命令它這樣做,這時register修飾符是C語言的一種很有價值的補充。然而,隨著編譯程序設計技術的進步,在決定哪些變量應該被存到寄存器中時,現在的C編譯程序能比程序員作出更好的決定。
  實際上,許多C編譯程序會忽略register修飾符,因為盡管它完全合法,但它僅僅是暗示而不是命令。
    在極罕見的情況下,程序運行速度很慢,而你也知道這是因為有一個變量被存儲在內存中,也許你最后會試圖在該變量前面加上register修飾符,但是,如果這并沒有加快程序的運行速度,你也不要感到奇怪。 
--------------------------------------------------------------------------------
 
--  作者:PrOve
--  發布時間:2005-4-5 23:10:05

--  
9.什么時候應該使用const修飾符?
    使用const修飾符有幾個原因,第一個原因是這樣能使編譯程序找出程序中不小心改變變量值的錯誤。請看下例:

while ( * str=0) / * programmer meant to write * str! =0 * /
{ 
     / * some code here * /
      strq++;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美影音先锋| 日韩精品自拍偷拍| 日韩国产欧美三级| 国产精品久久久久久妇女6080 | 欧美精品xxxxbbbb| eeuss国产一区二区三区| 亚洲午夜一区二区| 国产人成一区二区三区影院| 欧美日韩成人在线一区| 97久久超碰国产精品| 黄色日韩网站视频| 免费人成在线不卡| 亚洲国产日日夜夜| 亚洲私人影院在线观看| 久久久99久久| 日韩欧美成人激情| 91精品国产综合久久福利| 日本丶国产丶欧美色综合| 成人久久18免费网站麻豆| 久久国产婷婷国产香蕉| 午夜伦理一区二区| 亚洲国产sm捆绑调教视频| 亚洲伦理在线免费看| 国产精品久99| 中文字幕成人av| 国产亚洲一区二区三区在线观看| 精品少妇一区二区三区在线播放| 欧美日韩电影在线播放| 91精品1区2区| 欧美系列一区二区| 日本乱人伦一区| 91丨九色丨国产丨porny| 成人黄色免费短视频| 国产乱色国产精品免费视频| 激情久久五月天| 捆绑紧缚一区二区三区视频| 日产国产高清一区二区三区| 欧美96一区二区免费视频| 蜜桃av一区二区在线观看| 美女网站色91| 国精产品一区一区三区mba视频| 捆绑调教美女网站视频一区| 黑人巨大精品欧美一区| 国内精品伊人久久久久影院对白| 精品在线视频一区| 国产一区二区三区精品欧美日韩一区二区三区 | 日韩精品乱码av一区二区| 亚洲一区二区3| 亚洲成人动漫在线观看| 日韩综合小视频| 蜜桃视频一区二区| 国产高清久久久| 成人精品视频一区| 色94色欧美sute亚洲线路一ni| 欧美视频中文一区二区三区在线观看| 欧美中文字幕亚洲一区二区va在线 | 亚洲成人动漫精品| 美腿丝袜亚洲三区| 激情文学综合丁香| 成人性生交大片免费看中文| www.亚洲人| 欧美性猛片xxxx免费看久爱| 国产精品国产三级国产aⅴ中文| 日本韩国欧美三级| 欧美久久久一区| 欧美mv日韩mv国产| 久久久噜噜噜久久中文字幕色伊伊| 久久青草国产手机看片福利盒子| 中文成人综合网| 亚洲精品日韩一| 麻豆91精品视频| 成人动漫一区二区| 欧美日韩一区三区| 精品国产伦一区二区三区观看体验| 亚洲国产精品精华液ab| 亚洲6080在线| 国产不卡视频在线观看| 欧美亚洲禁片免费| 久久久蜜桃精品| 亚洲影院免费观看| 国产一区二区久久| 欧亚洲嫩模精品一区三区| 日韩精品一区二区三区蜜臀 | 国产日韩精品视频一区| 夜夜精品视频一区二区| 狠狠色综合播放一区二区| 色94色欧美sute亚洲线路一久| 日韩欧美国产高清| 尤物视频一区二区| 国产一区二区视频在线| 欧美在线小视频| 国产亚洲精品bt天堂精选| 日韩综合在线视频| 99视频精品在线| 日韩欧美国产综合| 夜夜亚洲天天久久| 国产999精品久久久久久绿帽| 欧美日产国产精品| 亚洲视频每日更新| 国产精品乡下勾搭老头1| 在线视频欧美精品| 中文字幕高清一区| 另类小说图片综合网| 91国产丝袜在线播放| 国产色产综合产在线视频| 青青草精品视频| 在线观看欧美日本| 中文字幕精品一区二区三区精品| 日本午夜一区二区| 欧美亚洲免费在线一区| 一区精品在线播放| 国产精品一区在线观看你懂的| 欧美日韩一区二区三区不卡| 中文字幕精品一区| 国产剧情一区二区| 日韩欧美亚洲国产另类| 亚洲一区在线观看免费| 99国产精品99久久久久久| 久久久.com| 精品一区中文字幕| 欧美一区日本一区韩国一区| 一区二区三区精密机械公司| 成人福利电影精品一区二区在线观看| 久久综合九色欧美综合狠狠| 日韩成人免费电影| 欧美日本在线播放| 亚洲一二三级电影| 日本丰满少妇一区二区三区| 亚洲天堂福利av| 91色porny在线视频| 亚洲人午夜精品天堂一二香蕉| 成人午夜伦理影院| 国产精品伦理在线| 99视频精品在线| 亚洲美女少妇撒尿| 在线观看不卡视频| 一区二区三区毛片| 欧美狂野另类xxxxoooo| 亚洲午夜激情av| 69精品人人人人| 日本中文字幕一区| 日韩三级高清在线| 精品一区免费av| 欧美国产欧美亚州国产日韩mv天天看完整 | 日韩视频免费观看高清完整版在线观看| 亚洲综合在线观看视频| 精品视频在线看| 丝袜亚洲另类丝袜在线| 91精品国产综合久久蜜臀| 蜜桃在线一区二区三区| 欧美videos中文字幕| 国产精品综合av一区二区国产馆| 久久久久久夜精品精品免费| 国产激情一区二区三区四区| 中文字幕二三区不卡| 91一区一区三区| 夜夜嗨av一区二区三区网页| 欧美精品 国产精品| 另类小说视频一区二区| 中文av字幕一区| 在线日韩国产精品| 看电视剧不卡顿的网站| 国产亚洲精品bt天堂精选| 91影视在线播放| 日韩成人av影视| 久久久久免费观看| 日本精品一区二区三区高清| 午夜一区二区三区在线观看| 欧美电影精品一区二区| 国产91高潮流白浆在线麻豆| 国产精品大尺度| 欧美日本国产视频| 国内精品在线播放| 亚洲免费色视频| 欧美一区二区三区白人| 国产69精品久久久久777| 亚洲卡通欧美制服中文| 3751色影院一区二区三区| 国产美女视频91| 亚洲美女少妇撒尿| 日韩欧美国产1| 北岛玲一区二区三区四区| 日韩精彩视频在线观看| 国产蜜臀av在线一区二区三区| 99国内精品久久| 老司机一区二区| 一区二区三区成人在线视频| 日韩色在线观看| 欧美综合色免费| 国产乱理伦片在线观看夜一区| 亚洲夂夂婷婷色拍ww47| 久久综合色鬼综合色| 91啪亚洲精品| 精品一区二区三区久久| 亚洲欧美综合另类在线卡通| 欧美一区二区三区的| 99国产精品久久久久久久久久久| 精品在线播放免费| 亚洲国产aⅴ成人精品无吗| 中文字幕国产一区二区|