【cs基礎】C語言重點

程序結構

  • 預處理指令cpp
  • 函數
  • 變量
  • 語句&表達式
  • 註釋

基本語法

  • token, C 程序由各種令牌組成,令牌可以是關鍵字、標識符、常量、字符串值,或者是一個符號。
  • 註釋 /* 我的第一個 C 程序 */

數據類型

  • 算術類型

    • 整數型

      char(1 Byte) , unsigned char 
      int(4),   unsigned int
      short(2), unsigned short
      long(4),  unsigned long
      
    • 浮點型

      float(4), double(8), long double(16)
      
  • void
  • 派生類型
    • 指針
    • 數組
    • 結構體
    • 共用體
    • 函數

變量

沒什麼好說的

常量

  • #define 預處理器。
  • 使用 const 關鍵字。

存儲類

  • auto 所有局部變量默認的存儲類
{
   int mount;
   auto int month;
}
  • register 存儲類用於定義存儲在寄存器中,變量的最大尺寸等於寄存器的大小
{
   register int  miles;
}
  • static 存儲類指示編譯器在程序的生命週期內保持局部變量的存在,也可以應用於全局變量。當 static 修飾全局變量時,會使變量的作用域限制在聲明它的文件內

  • extern 存儲類用於提供一個全局變量的引用,全局變量對所有的程序文件都是可見的; extern 是用來在另一個文件中聲明一個全局變量或函數

運算符

判斷

循環

函數

數組

    double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};

指針

一個變量,其值爲另一個變量的地址,即,內存位置的直接地址

字符串

strcpy(s1, s2);
strcat(s1, s2);
strlen(s1);
strcmp(s1, s2); 比較
strchr(s1, ch); ch 出現的index
strstr(s1, s2); s2 第一次出現的位置。

結構體

  • 存儲不同類型的數據項,成員訪問運算符(.)

    struct Books
    {
           char  title[50];
           char  author[50];
           char  subject[100];
           int   book_id;
    } book;  
    
  • 指向結構體的指針

    • 結構變量的地址

      struct_pointer = &Book1;
      
    • 訪問結構體的成員 ,必須使用 -> 運算符

      void printBook( struct Books *book )
      {
         printf( "Book title : %s\n", book->title);
         printf( "Book author : %s\n", book->author);
         printf( "Book subject : %s\n", book->subject);
         printf( "Book book_id : %d\n", book->book_id);
      }
      
  • 位域

    把一個字節中的二進位劃分爲幾個不同的區域,並說明每個區域的位數

    struct bs{
        int a:8;
        int b:2;
        int c:6;
    }data;
    

共用體

  • 允許您在相同的內存位置存儲不同的數據類型,
  • 共用體佔用的內存應足夠存儲共用體中最大的成員
  • 爲了所有的成員都能完好輸出,因爲同一時間只用到一個成員

    union Data
    {
       int i;
       float f;
       char  str[20];
    } data; 
    

typedef

爲類型取一個新的名字

typedef unsigned char BYTE;
標識符 BYTE 可作爲類型 unsigned char 的縮寫

輸入輸出

  • int scanf(const char *format, …) 函數

    用於從標準輸入(鍵盤)讀取並格式化
    
  • int printf(const char *format, …) 函數

    發送格式化輸出到標準輸出(屏幕)。
    
  • int getchar(void) 函數

    從屏幕讀取下一個可用的字符,並把它返回爲一個整數
    
  • int putchar(int c) 函數

    把字符輸出到屏幕上,並返回相同的字符
    
  • char *gets(char *s) 函數

    從 stdin 讀取一行到 s 所指向的緩衝區,直到一個終止符或 EOF
    
  • int puts(const char *s) 函數

    把字符串 s 和一個尾隨的換行符寫入到 stdout。
    

文件讀寫

  • 打開文件

    fp = fopen("/tmp/test.txt", "w+");
    
  • 關閉文件

     fclose(fp);
    
  • 寫入文件

    fputs("This is testing for fputs...\n", fp);
    fprintf(fp, "This is testing for fprintf...\n");
    
    也可以使用 int fprintf(FILE *fp,const char *format, ...) 函數來寫把一個字符串寫入到文件中
    
  • 讀取文件

    fscanf(fp, "%s", buff);
    printf("1 : %s\n", buff );
    
    fgets(buff, 255, (FILE*)fp);
    printf("2: %s\n", buff );
    
  • 二進制

    size_t fread(void *ptr, size_t size_of_elements, 
                 size_t number_of_elements, FILE *a_file);
    
    size_t fwrite(const void *ptr, size_t size_of_elements, 
                 size_t number_of_elements, FILE *a_file);
    

預處理器

#define 定義宏
#include    包含一個源代碼文件
#undef  取消已定義的宏
#ifdef  如果宏已經定義,則返回真
#ifndef 如果宏沒有定義,則返回真
#if 如果給定條件爲真,則編譯下面代碼
#else   #if 的替代方案
#elif   如果前面的 #if 給定條件不爲真,當前條件爲真,則編譯下面代碼
#endif  結束一個 #if……#else 條件編譯塊
#error  當遇到標準錯誤時,輸出錯誤消息
#pragma 使用標準化方法,向編譯器發佈特殊的命令到編譯器中

錯誤處理

errno、perror() 和 strerror()

可變參數

http://www.runoob.com/cprogramming/c-variable-arguments.html

內存管理

void *calloc(int num, int size);
該函數分配一個帶有 num 個元素的數組,每個元素的大小爲 size 字節。

void free(void *address); 
該函數釋放 address 所指向的h內存塊。

void *malloc(int num); 
該函數分配一個 num 字節的數組,並把它們進行初始化。

void *realloc(void *address, int newsize); 
該函數重新分配內存,把內存擴展到 newsize。

主要參考菜鳥教程:
http://www.runoob.com/cprogramming/c-data-types.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章