C語言易錯點總結

#include < > 和#include " "的區別:

  • #include < >編譯器在預設目錄中搜索頭文件,一般是庫文件所在目錄
  • #include " "編譯器在當前工程文件目錄中搜索頭文件,如果搜索不到,去庫文件所在目錄搜索頭文件。

變量的本質:

1.開辟空間 <p>2.往空間里面放內容 <p> 3.從空間里把內容讀取出來

常量(const關鍵字)

在創建的時候初始化,一經賦值不能在改變

枚舉類型(enum)

語法:enum 枚舉名{枚舉常量1,...} 枚舉變量名
優點:增強代碼的可維護性

自增 和自減運算

  • i++和i--;

先使用當前變量的值,在進行自增自減運算

  • ++i和--i

先進行自增自減,再使用變化后的新值

例1

   #include <stdio.h>
   int main(int argc, const char * argv[])
   {
      int a = 1, b = 2, c = 3;
     if(a++ == 1 && (++b == 3 || c++ == 3))
     {  
        printf("%d %d %d\n", a, b, c);
     }
        return 0;
   }
   輸出結果為:233

分析上面的例子,a++ == 1, a先是1==1成立,在自加1, a = 2;++b == 3,b 先自加1 ->b = 3; b == 3 成立,邏輯或后面的不再判斷, 所以c = 3

  • sizeof是運算符(計算操作數的字節數)

邏輯或(||)和邏輯與(&&)(見例1)

注意:

如果||前面有一個條件為真,后面的都不再做判斷;
如果&&前面有一個為假,后面的條件不再判斷;

  • * 一元否定運算符( ! )

例2

 #include <stdio.h>
 int main(int argc, const char * argv[]) {
        int a = 5, b = 0;
       if(!b)//if(!b)等價于if(b == 0)
        {
            b = a++;
        }
        else
        {
            b = --a;
        }
        printf("a = %d,b = %d\n", a, b);
    }
 輸出結果為:a = 6,b = 5

for循環的執行順序

(先執行語句1;然后執行語句2判斷真假,真的話執行循環體里的語句;當{}內語句執行完后執行語句3;再判斷2的真假...知道2不滿足時退出for循環。)

注意:

在使用while{}和do while{}循環時,一定要修改循環變量的值,避免造成死循環。

例3

for循環的執行順序

函數

  • 函數的定義

返回值類型 函數名 (形參列表)

  • 函數調用的實質

函數相當于一個指針,存儲的是這個函數代碼區的地址編號

  • 函數傳參的三種方式(單向傳遞)實參—>形參
    傳值
    傳指針(地址)
    傳引用(C++)

字符串

字符串函數

  • int strlen(const char *)計算字符串長度;
  • char *strcpy(char *to, const char *from)字符串拷貝函數
  • char *strcat(char *, const char *)字符串拼接函數
  • int strcmp(const char *str1, const char *str2)字符串比較函數(返回值三種>0,==0,<0)
Snip20160727_3.png

結構體的sizeof的計算

先看結構體中最大字節的類型;然后以最大字節數為一行分配內存;當分配到相應類型時,數字標號(從0開始)一定要能整除當前類型的字節數,不能整除就往后偏移。當最后分配的內存不足一行時,按一行算。

宏定義(#define)

注意點:#define max(A, B) ((A) >(B) ? (A) : (B));
參數可能是一個表達式,所以要加( );
宏定義是在預編譯的時候替換,不需要寫類型。

break continue 和return

  • break

1.用在switch結構,作用是跳出switch結構
2.用在循環語句中,跳出循環,執行循環語句下面的語句。如果是多層循環,只會跳出當層循環。

  • continue

用于循環體內部,作用是結束本次循環,開始新的循環。所以當執行continue語句之后,continue后面的循環語句將不再執行。

  • return

跳出當前的函數,當前函數return后面的語句不會再執行。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容