C陷阱與缺陷 第一章

來源:互聯網
上載者:User

標籤:

1. 使用 e1=e2的賦值方式 作為 條件陳述式內部的判斷,請使用顯示的判斷不使用:
if( x =y )     foo();

而使用:

if( (x = y) != 0)     foo();

2. 注意編碼規範,一定要在賦值號 “=”兩邊,寫上空格,以避免如下的 無意識錯誤。

本來想寫成:
a = -1;

但是沒有加空格:

a=-1;

這會被編譯器翻譯成:(這裡猜測應該是很老的編譯器才有這種解釋,現在都是用 “+=”和“-=”運算子)

a = a - 1;

3.進位的表示

int a ;a = 141;  /*十進位*/printf("a:%d \r\n" ,a);a = 0215; /*八進位,以數字“0”開頭*/printf("a:%d \r\n" ,a);a = 0x8D; /*十六進位*/printf("a:%d \r\n" ,a);

 

現在 ” 0195“  的表示方法會被編譯器報錯
a = 0195;   /*八進位*/

4.字元與字串

     首先說明的是,對於字串常量,是儲存在常量區,唯讀資料區 .rodata裡面的。     (推薦一篇講變數儲存位置的文章http://blog.163.com/[email protected]/blog/static/404330272007102012451957/)     並且,對於同樣的字串,是只存在一個副本的,在尋找字串的時候,會先去唯讀資料區尋找有無對應字串的儲存地址,有的話,直接輸出;沒有才會建立新的字串: 
char * str = "test string address.";char * str1 = "test string address.";cout<<hex<<(int)( str)<<endl;/*以16進位無符號形式輸出*/cout<<(int )(str1)<< endl;cout<<(int )("test string address.")<< endl;;printf("Ox%x \r\n" ,str); /*以16進位無符號形式輸出*/printf("Ox%x \r\n" ,str1);printf("Ox%x \r\n" ,"test string address.");

分別用C和C++的輸出資料流,輸出”test string address.”的地址,發現是一樣的。 

 對於printf()函數來說,內部傳入的是字串的地址,所以要分清楚 字元 (‘n‘ ‘\r‘……用單引號,傳遞的是值,字元等價於一個整數,對應其ASCII碼)和 字串("n","\r"……用雙引號,傳遞的是地址,這個從上面的例子,直接把"test string address." 傳給printf()函數可以看出)的區別
printf(‘\n‘ ); /*報錯*/printf("\n" );

 

5. 用字元給int賦值                
int a ;a = ‘yes‘ ;    

     這時候,相當於把 int 變數當作一個 char [4]的數組,‘yes‘會被高位對高位,低位對低位的填充進a中。               

cout <<(char )a<< endl;cout <<(char )(a>>8)<< endl;cout <<(char )(a>>16)<< endl;cout <<(char )(a>>24)<< endl;    

 

     如果字元不足4個,那麼高位補0;                
cout <<(char )a<< endl;cout <<(char )(a>>8)<< endl;cout <<(char )(a>>16)<< endl;cout <<(int )(a>>24)<< endl;

     如果字元過多,則會報錯。
int a ;a = ‘abcde‘ ; 

C陷阱與缺陷 第一章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.