程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C語言常見陷阱總結,c語言陷阱

C語言常見陷阱總結,c語言陷阱

編輯:C++入門知識

C語言常見陷阱總結,c語言陷阱


1.  1 char array1[100]; 2 char* array2; 二者都可以當指針用,使用時有何區別?

  1中字符數組,存儲於棧區,sizeof(array1)為100,aray1代表首元素首地址,不可以被賦值,array1[0]這樣可以被賦值,數組大小確定,難以擴容

  2中存儲於字符常量區,sizeof(array2)為4,array2可以被賦值,array2[0]不可以被賦值,空間大小可變

2. 32位中,long型和指針占4個字節,64位中占8個字節

3. strcat連續拼接字符串時,每次都要找到結尾,解決方案時給結尾做標記

4. const在C語言中為只讀變量,C++中為常量

5. 一般機器默認小端存儲,蘋果機器為大端存儲

6. char a[] = "Hello world"; 

 sizeof(a) = 12    注:sizeof時算 \0 ,strlen時不算 \0 

 sizeof(*a) = 1      sizeof(&a) = 4

 當字符數組以函數參數形式存在時,sizeof為4

7. printf函數執行時,計算順序是從後向前,輸出順序是從前向後,可以將printf函數中想成傳入的參數,存儲於棧區

8. 

int a[] ={2,8,16,24};
char* p1 = a;
char* p2 = &a[3];
p2-p1 = ?

本題中,兩個地址相減,求的是指針的偏移量,p1指向的內容是2,p2指向的內容是24,p2-p1為3個4字節大小,為12,又因為p1和p2的基本類型為1個字節,所以(3*4)/1=12

9. 括號表示表達式,表達式要變成int類型計算;有符號要向無符號類型轉換;小類型要向大類型轉換

10.

(a=1)?2:3

a=1,表示整個表達式的值為1,所以輸出為2

11.switch case語句中,每個case過後如若沒有遇到break,則順次向下執行

12.char a[100] = {'a','b','c','\0','1','2'};  遇到  '\0'  字符串結束

   char a[100] = {'a','b','c','0','1','2'};   '0' 代表字符不是'\0'

     char a[100] = {'a','b','c',0,'1','2'};     '\0'就是0,字符串結束

13.阿克曼函數  ack(1,k) = 2+x;   ack(2,x) = 3+2*x;   ack(3,x) = 2^(x+3)-3;

14.在移位運算時,數據需要補位時,符號位是什麼就補什麼

     如

int i = 0xf0000000;i >>=1; i=0xf8000000

15.常量數值不能進行自加自減運算

16.注意與或運算,與運算時,前面表達式為假時,與運算符後面的表達式不參與運算,輸出為假,若為真,則再計算與運算符後面的表達式

     或運算時,或運算符前面的表達式為真時,不計算或運算符後面的表達式,直接輸出為1,若為假,則在計算或運算符後面的表達式

17.sizeof返回值為unsigned int,當int遇到了unsigned int 時,轉換為unsigned int進行計算

18.棧區空間的生命周期在遇到}時截止,在}之前返回棧區申請的空間不存在,因為被回收了,字符常量區的內容只能讀不能向裡面寫

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved