C語(yǔ)言學(xué)習(xí)筆記

第一部分C語(yǔ)言的組成

一.基本數(shù)據(jù)類(lèi)型

  1. java中有八中基本數(shù)據(jù)類(lèi)型党窜,而在c/c++中沒(méi)有byte和boolean(在C中0為false灯变,非0為true)
  2. 在c語(yǔ)言中多了long long unsiged(無(wú)符號(hào)设凹,只能大于等于0)singned整形修飾
  3. 和java語(yǔ)言同一種數(shù)據(jù)類(lèi)型所占內(nèi)存大小不一致咆霜,char涎嚼,long
  4. sizeof運(yùn)算符杉辙,計(jì)算當(dāng)前數(shù)據(jù)類(lèi)型所占用的字節(jié)的大小席噩,如果傳入變量名稱(chēng)班缰,計(jì)算出變量對(duì)應(yīng)的數(shù)據(jù)類(lèi)型的長(zhǎng)度
  5. C的基本數(shù)據(jù)類(lèi)型(九種數(shù)據(jù)類(lèi)型)
    char ,int 悼枢, float 埠忘,double , signed ,unsigned 莹妒,long 名船,short and void;
  6. java中的數(shù)據(jù)類(lèi)型和C語(yǔ)言的數(shù)據(jù)類(lèi)型對(duì)比
            java                C
    1   boolean byte        char
    2   char  short         short
    4   int  float          int long float
    8   long  double        double 旨怠,long long

二.基本輸入輸出函數(shù)

  1. 在c語(yǔ)言中都是先聲明在使用的渠驼,printf輸出函數(shù)和scanf輸入函數(shù)均在頭文件中已聲明

  2. 數(shù)據(jù)輸入或者輸出的表現(xiàn)形式

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

三.指針

  1. 指針就是內(nèi)存地址
  2. 內(nèi)存的特點(diǎn)
    1. 最小單位是byte
    2. 內(nèi)存是線(xiàn)性連續(xù)的排列
    3. 32為操作系統(tǒng)最大的內(nèi)存4G ,操作系統(tǒng)管理的一段內(nèi)存空間鉴腻,32位操作系統(tǒng)每一個(gè)進(jìn)程的最大可用內(nèi)存是4G,4G=2^32=4294967296
  3. 什么是指針
    1. 對(duì)內(nèi)存最小單元進(jìn)行編號(hào) 0~~4294967295
    2. 每一個(gè)內(nèi)存單元的編號(hào)稱(chēng)之為指針
    3. 指針就是內(nèi)存地址
  4. 指針的作用
    1. 可以直接訪(fǎng)問(wèn)硬件
    2. 快速傳遞數(shù)據(jù)
    3. 表示復(fù)雜的數(shù)據(jù)結(jié)構(gòu)
    4. 方便處理字符串等
  5. 指針訪(fǎng)問(wèn)內(nèi)存的運(yùn)算符
    1. &取地址運(yùn)算符 &變量名

    2. *取對(duì)象運(yùn)算符 *指針

       #include <stdio.h>
       int main(){
           int i;//在內(nèi)存中申請(qǐng)4個(gè)字節(jié)內(nèi)存  申請(qǐng)大小根據(jù)數(shù)據(jù)類(lèi)型確定
           i=10;//通過(guò)變量名操作這段內(nèi)存
           printf("i=%d\n",i); 
           
           //通過(guò)取地址運(yùn)算符獲取變量i的內(nèi)存地址
           &i;
           //通過(guò)*取對(duì)象運(yùn)算符操作內(nèi)存地址對(duì)應(yīng)的內(nèi)存空間
           *&i = 20;
           
           printf("i=%d\n",i); 
           return 0;
       }
      
  6. 指針變量
    1. 保存指針的變量也就是保存地址的變量迷扇;
    2. 指針變量的定義: 保存指針的數(shù)據(jù)類(lèi)型 * 變量名
    3. 指針變量在32位操作系統(tǒng)上的內(nèi)存大小為4個(gè)字節(jié)(固定的)
  7. 指針的數(shù)據(jù)類(lèi)型和指針類(lèi)型
    1. 指針類(lèi)型: 指針變量去掉變量名 保存首地址對(duì)應(yīng)的變量類(lèi)型*
    2. 指針的數(shù)據(jù)類(lèi)型: 指針變量指向的變量數(shù)據(jù)類(lèi)型
    3. 指針的數(shù)據(jù)類(lèi)型不確定指針變量占用的內(nèi)存大小,決定指針變量訪(fǎng)問(wèn)的內(nèi)存長(zhǎng)度
  8. 值傳遞和引用傳遞
    1. java中:
      • 基本數(shù)據(jù)類(lèi)型都是值傳遞
      • 對(duì)象傳遞都是引用傳遞
    2. C語(yǔ)言中:一般都是值傳遞
  9. 指針常見(jiàn)的一些錯(cuò)誤
    1. 混用不同的指針 不同指針變量不能直接賦值爽哎,可強(qiáng)轉(zhuǎn)之后再賦值浪默,但需保證強(qiáng)轉(zhuǎn)有意義
    2. 野指針 定義的指針變量沒(méi)有合法指向类少,沒(méi)有保存任何變量的首地址焙格;
      • 定義指針變量要有合法的指向芜茵,如果暫時(shí)沒(méi)有就指向NULL指針 int *pi=NULL
      • NULL指針不可讀不可寫(xiě)盹舞,訪(fǎng)問(wèn)就會(huì)報(bào)錯(cuò)产镐;

四.數(shù)組

  1. 數(shù)組

    • java數(shù)組對(duì)象 c語(yǔ)言數(shù)組相同數(shù)據(jù)類(lèi)型的集合;

    • 定義數(shù)組: int arr【4】踢步;

    • 訪(fǎng)問(wèn)數(shù)組: arr【0】 arr【1】 C語(yǔ)言不檢查角標(biāo)越界癣亚;

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

    • 數(shù)組名代表首元素首地址

    • 數(shù)組的傳遞需要傳遞數(shù)組名和數(shù)組元素的個(gè)數(shù)

        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. 指針和數(shù)組之間的關(guān)系

    • 數(shù)組名代表首元素首地址

    • C語(yǔ)言中不檢查角標(biāo)越界

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

  3. 進(jìn)程的內(nèi)存分布
    · - 局部變量 被{}包裹的變量 作用范圍再{}以?xún)?nèi) 生命周期執(zhí)行完{}后銷(xiāo)毀

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

    • 不同類(lèi)型的指針不可以直接賦值需要強(qiáng)轉(zhuǎn)之后才可賦值然而對(duì)于void*指針則可以直接進(jìn)行賦值不需要強(qiáng)轉(zhuǎn)获印,這個(gè)就是這個(gè)指針的特點(diǎn)述雾;
    • 對(duì)于java中object類(lèi)型的數(shù)據(jù)轉(zhuǎn)化可以用void*指針來(lái)接受,
  5. malloc和free使用

  6. 字符串

    • c語(yǔ)言中沒(méi)有字符串兼丰,以字符數(shù)組表示字符串玻孟,以“\0”作為字符串的結(jié)束標(biāo)記
    • 字符串的定義---兩種定義方式
            //按照字符數(shù)組方式定義字符串 
            //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);
                
                //定義數(shù)組方式二 
            //  char *pc = "hello"; //定義了字符串常量 
            //  char *pc=arr;//定義普通字符串 可以修改字符串的數(shù)據(jù) 
            //  *pc='r';
            //  char *pc=NULL;
            //  pc="hello";
            //  *pc='p';    

- 字符串的傳遞只需要傳遞字符串首元素首地址,有\(zhòng)0結(jié)束標(biāo)記
- 字符串求長(zhǎng)度:便利字符數(shù)組找到\0結(jié)束標(biāo)記
- 字符串函數(shù)

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

五.結(jié)構(gòu)體

  1. 定義結(jié)構(gòu)體鳍征,三種類(lèi)型黍翎,普通的結(jié)構(gòu)體,全局的結(jié)構(gòu)體艳丛,匿名的結(jié)構(gòu)體匣掸;

         #include <stdio.h>
         //定義結(jié)構(gòu)體類(lèi)型  int 
         struct Student{//struct 結(jié)構(gòu)體標(biāo)識(shí)  Student 結(jié)構(gòu)體名 
             char *name;//姓名
             int age;
             float score; 
         };
         
         struct Student{//struct 結(jié)構(gòu)體標(biāo)識(shí)  Student 結(jié)構(gòu)體名 
             char *name;//姓名
             int age;
             float score; 
         }stu;//定義結(jié)構(gòu)體類(lèi)型全局變量 
         
         
         struct{//struct 結(jié)構(gòu)體標(biāo)識(shí)  Student 結(jié)構(gòu)體名 
             char *name;//姓名
             int age;
             float score; 
         }stu;//匿名結(jié)構(gòu)體  只能定義一個(gè)變量 
         int main(){
             //結(jié)構(gòu)體類(lèi)型變量
             struct Student  stu;//局部變量 
             return 0;
         }
    
  2. 訪(fǎng)問(wèn)結(jié)構(gòu)體中的字段

         stu.name="hello";
         stu.age=23;
         stu.score=59.9;
    
  3. 結(jié)構(gòu)體傳遞屬于值傳遞

  4. 結(jié)構(gòu)體定義指針 - struct Student *pstu

  5. 通過(guò)結(jié)構(gòu)體一級(jí)指針訪(fǎng)問(wèn)結(jié)構(gòu)體字段

    • (*pstu).name
    • 通過(guò)一級(jí)指針指向訪(fǎng)問(wèn)pstu->name

6.聯(lián)合體union
- 不能夠同時(shí)操作多個(gè)字段,只能一次操作一個(gè)字段
- 聯(lián)合體內(nèi)存是里面最大字段占用的內(nèi)存

六. 枚舉

七. typedef關(guān)鍵字 起別名

  1. 作用:
    1. 可以簡(jiǎn)化定義氮双,某些函數(shù)指針名或者結(jié)構(gòu)體指針比較長(zhǎng)碰酝,可以通過(guò)起別名的方式來(lái)定義,此種方式可以簡(jiǎn)化代碼戴差;
            int i;//i變量名
            typedef int i;//i代表int數(shù)據(jù)類(lèi)型
            i a;//定義了int數(shù)據(jù)類(lèi)型
            
            struct Student stu送爸;//stu結(jié)構(gòu)體變量名
            typedef struct Student stu;//stu 代表結(jié)構(gòu)體類(lèi)型 struct Student 
            stu sstu;//定義了結(jié)構(gòu)體類(lèi)型的變量
    
            void (*padd)(int,int,int *);//padd函數(shù)指針變量名  
            typedef void (*padd)(int,int,int *);//padd代表指針類(lèi)型 
            padd ppadd;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市碱璃,隨后出現(xiàn)的幾起案子弄痹,更是在濱河造成了極大的恐慌,老刑警劉巖嵌器,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肛真,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡爽航,警方通過(guò)查閱死者的電腦和手機(jī)蚓让,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)讥珍,“玉大人历极,你說(shuō)我怎么就攤上這事≈缘瑁” “怎么了趟卸?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)氏义。 經(jīng)常有香客問(wèn)我锄列,道長(zhǎng),這世上最難降的妖魔是什么惯悠? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任邻邮,我火速辦了婚禮,結(jié)果婚禮上克婶,老公的妹妹穿的比我還像新娘筒严。我一直安慰自己,他們只是感情好情萤,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布鸭蛙。 她就那樣靜靜地躺著,像睡著了一般筋岛。 火紅的嫁衣襯著肌膚如雪规惰。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天泉蝌,我揣著相機(jī)與錄音歇万,去河邊找鬼。 笑死勋陪,一個(gè)胖子當(dāng)著我的面吹牛贪磺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播诅愚,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼寒锚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼劫映!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起刹前,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤泳赋,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后喇喉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體祖今,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年拣技,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了千诬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡膏斤,死狀恐怖徐绑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情莫辨,我是刑警寧澤傲茄,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站沮榜,受9級(jí)特大地震影響盘榨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜敞映,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一较曼、第九天 我趴在偏房一處隱蔽的房頂上張望磷斧。 院中可真熱鬧振愿,春花似錦、人聲如沸弛饭。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)侣颂。三九已至档桃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間憔晒,已是汗流浹背藻肄。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拒担,地道東北人嘹屯。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像从撼,于是被迫代替她去往敵國(guó)和親州弟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容