C語言學習筆記

第一部分C語言的組成

一.基本數據類型

  1. java中有八中基本數據類型,而在c/c++中沒有byte和boolean(在C中0為false,非0為true)
  2. 在c語言中多了long long unsiged(無符號,只能大于等于0)singned整形修飾
  3. 和java語言同一種數據類型所占內存大小不一致,char,long
  4. sizeof運算符,計算當前數據類型所占用的字節的大小,如果傳入變量名稱,計算出變量對應的數據類型的長度
  5. C的基本數據類型(九種數據類型)
    char ,int , float ,double , signed ,unsigned ,long ,short and void;
  6. java中的數據類型和C語言的數據類型對比
            java                C
    1   boolean byte        char
    2   char  short         short
    4   int  float          int long float
    8   long  double        double ,long long

二.基本輸入輸出函數

  1. 在c語言中都是先聲明在使用的,printf輸出函數和scanf輸入函數均在頭文件中已聲明

  2. 數據輸入或者輸出的表現形式

         %d  -  int
         %ld – long int
         %c  - char
         %f -  float
         %u – 無符號數
         %hd – 短整型
         %lf – double
         %x – 十六進制輸出 int 或者long int 或者short int
         %o -  八進制輸出
         %s – 字符串
         %p-指針
             
     scanf("%d",&i);//將int變量i的地址傳遞  輸入數據賦值給i的地址對應的數據  \n不能停止輸入
     printf("i=%d\n",i); 
    

三.指針

  1. 指針就是內存地址
  2. 內存的特點
    1. 最小單位是byte
    2. 內存是線性連續的排列
    3. 32為操作系統最大的內存4G ,操作系統管理的一段內存空間,32位操作系統每一個進程的最大可用內存是4G,4G=2^32=4294967296
  3. 什么是指針
    1. 對內存最小單元進行編號 0~~4294967295
    2. 每一個內存單元的編號稱之為指針
    3. 指針就是內存地址
  4. 指針的作用
    1. 可以直接訪問硬件
    2. 快速傳遞數據
    3. 表示復雜的數據結構
    4. 方便處理字符串等
  5. 指針訪問內存的運算符
    1. &取地址運算符 &變量名

    2. *取對象運算符 *指針

       #include <stdio.h>
       int main(){
           int i;//在內存中申請4個字節內存  申請大小根據數據類型確定
           i=10;//通過變量名操作這段內存
           printf("i=%d\n",i); 
           
           //通過取地址運算符獲取變量i的內存地址
           &i;
           //通過*取對象運算符操作內存地址對應的內存空間
           *&i = 20;
           
           printf("i=%d\n",i); 
           return 0;
       }
      
  6. 指針變量
    1. 保存指針的變量也就是保存地址的變量;
    2. 指針變量的定義: 保存指針的數據類型 * 變量名
    3. 指針變量在32位操作系統上的內存大小為4個字節(固定的)
  7. 指針的數據類型和指針類型
    1. 指針類型: 指針變量去掉變量名 保存首地址對應的變量類型*
    2. 指針的數據類型: 指針變量指向的變量數據類型
    3. 指針的數據類型不確定指針變量占用的內存大小,決定指針變量訪問的內存長度
  8. 值傳遞和引用傳遞
    1. java中:
      • 基本數據類型都是值傳遞
      • 對象傳遞都是引用傳遞
    2. C語言中:一般都是值傳遞
  9. 指針常見的一些錯誤
    1. 混用不同的指針 不同指針變量不能直接賦值,可強轉之后再賦值,但需保證強轉有意義
    2. 野指針 定義的指針變量沒有合法指向,沒有保存任何變量的首地址;
      • 定義指針變量要有合法的指向,如果暫時沒有就指向NULL指針 int *pi=NULL
      • NULL指針不可讀不可寫,訪問就會報錯;

四.數組

  1. 數組

    • java數組對象 c語言數組相同數據類型的集合;

    • 定義數組: int arr【4】;

    • 訪問數組: arr【0】 arr【1】 C語言不檢查角標越界;

    • 求數組元素個數: sizeof(arr)/sizeof(arr【0】)

    • 數組名代表首元素首地址

    • 數組的傳遞需要傳遞數組名和數組元素的個數

        void print_arr(char arr[4],int count){
            int i=0;
            for(i=0;i<count;i++){
                printf("arr[%d]=%d\n",i,*(arr+i));
            } 
        } 
      
  2. 指針和數組之間的關系

    • 數組名代表首元素首地址

    • C語言中不檢查角標越界

      int *pi=arr
      *(pi+0)《==》pi[0] …… *(pi+3)《==》pi[3]

  3. 進程的內存分布
    · - 局部變量 被{}包裹的變量 作用范圍再{}以內 生命周期執行完{}后銷毀

    • 全部變量 沒有被任意的{}包裹 可以一直使用
    • static修飾局部變量 作用范圍不變,生命周期和全局變量一直
  4. void *指針

    • 不同類型的指針不可以直接賦值需要強轉之后才可賦值然而對于void*指針則可以直接進行賦值不需要強轉,這個就是這個指針的特點;
    • 對于java中object類型的數據轉化可以用void*指針來接受,
  5. malloc和free使用

  6. 字符串

    • c語言中沒有字符串,以字符數組表示字符串,以“\0”作為字符串的結束標記
    • 字符串的定義---兩種定義方式
            //按照字符數組方式定義字符串 
            //hello 
            //  char arr[6]={'h','e','l','l','o','\0'};
            //  char arr[6]={"hello"};
                char arr[6]="hel"; 
                int coun;
            //  arr[0]='d';
            //  printf("arr=%s\n",arr);
                
                //定義數組方式二 
            //  char *pc = "hello"; //定義了字符串常量 
            //  char *pc=arr;//定義普通字符串 可以修改字符串的數據 
            //  *pc='r';
            //  char *pc=NULL;
            //  pc="hello";
            //  *pc='p';    

- 字符串的傳遞只需要傳遞字符串首元素首地址,有\0結束標記
- 字符串求長度:便利字符數組找到\0結束標記
- 字符串函數

            - //字符串長度   coun = strlen(arr);
            - 字符串比較 int c = strcmp(arr,arr1); 

五.結構體

  1. 定義結構體,三種類型,普通的結構體,全局的結構體,匿名的結構體;

         #include <stdio.h>
         //定義結構體類型  int 
         struct Student{//struct 結構體標識  Student 結構體名 
             char *name;//姓名
             int age;
             float score; 
         };
         
         struct Student{//struct 結構體標識  Student 結構體名 
             char *name;//姓名
             int age;
             float score; 
         }stu;//定義結構體類型全局變量 
         
         
         struct{//struct 結構體標識  Student 結構體名 
             char *name;//姓名
             int age;
             float score; 
         }stu;//匿名結構體  只能定義一個變量 
         int main(){
             //結構體類型變量
             struct Student  stu;//局部變量 
             return 0;
         }
    
  2. 訪問結構體中的字段

         stu.name="hello";
         stu.age=23;
         stu.score=59.9;
    
  3. 結構體傳遞屬于值傳遞

  4. 結構體定義指針 - struct Student *pstu

  5. 通過結構體一級指針訪問結構體字段

    • (*pstu).name
    • 通過一級指針指向訪問pstu->name

6.聯合體union
- 不能夠同時操作多個字段,只能一次操作一個字段
- 聯合體內存是里面最大字段占用的內存

六. 枚舉

七. typedef關鍵字 起別名

  1. 作用:
    1. 可以簡化定義,某些函數指針名或者結構體指針比較長,可以通過起別名的方式來定義,此種方式可以簡化代碼;
            int i;//i變量名
            typedef int i;//i代表int數據類型
            i a;//定義了int數據類型
            
            struct Student stu;//stu結構體變量名
            typedef struct Student stu;//stu 代表結構體類型 struct Student 
            stu sstu;//定義了結構體類型的變量
    
            void (*padd)(int,int,int *);//padd函數指針變量名  
            typedef void (*padd)(int,int,int *);//padd代表指針類型 
            padd ppadd;
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,156評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,401評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,069評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,873評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,635評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,128評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,203評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,365評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,881評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,733評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,935評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,475評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,172評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,582評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,821評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,595評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,908評論 2 372

推薦閱讀更多精彩內容