1. 程式人生 > >C語言基礎知識筆記

C語言基礎知識筆記

C語言筆記
    1. 因為預設main為int所以可以直接:
      • main(){
    2. 函式定義不可巢狀
    3. 運算子%%只能用於整數操作
    4. %%要雙標記才能列印
    5. 判等與賦值一定要區分
    6. 不可以在同一個地方,訪問和修改同一個數的數值
    7. 負數操作運算子“/”、“%”時,C89和C99都要確保一個神奇的公式:(a/b)*b+a%d=a
    8. 變數是左值
    9. if(表示式){語句;}
    10. if(表示式){語句;}else語句
    11. if的用法:
      • if(表示式){語句;}
      • else if(表示式){語句;}
      • else if(表示式){語句;}
      • else{語句;}
    12. 條件表示式:
      • 表示式1?表示式2:表示式3
      • 表示式1成立計算表示式2的值
      • 表示式1不成立計算表示式3的值
    13. switch結構:
      • switch(表示式){
      • case 表示式1: case 2: case 3:
        • 語句;break;
      • case 表示式4:
        • 語句;break;
      • default:語句;break;
    14. else語句屬於離他最近的且還未與其他else配對的if語句
    15. 迴圈中
      1. while用於迴圈體執行之前檢驗
      2. do用於迴圈執行之後檢
      3. for用於遞增或遞減計數變數的迴圈
      4. continue語句僅在迴圈可用
    16. while迴圈:
      1. while(表示式)表示式不為0即執行
      2. {語句;}
      3. 如果一來就為0,會一次都不執行直接跳出迴圈
    17. while(1)是一種常用的無限迴圈語句
    18. do迴圈:
      1. do{語句;}while(表示式);
      2. 先執行迴圈,再判定
      3. 至少執行一次迴圈
    19. for迴圈:
      1. for(表示式1;2;3)
      2. 表示式1用來賦初值(迴圈執行前)
      3. 表示式2用來控制迴圈終止
      4. 表示式3(迴圈執行後執行)
      5. 可以等價於
        • 表示式1;
        • while(表示式2){
        • 語句
        • 表示式3;
      6. 必須有兩個分號,表示式1都可以挑出來表達之後省略(;2;3)
    20. 形式引數定義時!每個形參前必須都有其型別說明
    21. 函式定義:
      1. 返回型別 函式名(形式引數)
      2. 宣告;
      3. 語句;
      4. (花括號內的稱為函式體)
    22. 函式呼叫:
      1. 函式名(實際引數);
    23. 函式宣告:
      1. 返回型別 函式名(形式引數);
      2. 注意!這裡有分號!
      3. 原因是形式引數裡面沒有具體的變數名稱,只需要型別
      4. 目的是讓程式進行預備
      5. 如果函式在呼叫前遇到了原型,編譯器會建立一個隱式宣告(也說明函式宣告的重要性!)
      6. 如果函式在呼叫前沒有遇到原型,編譯器會執行預設的實際引數提升
    24. 無實參的函式要呼叫也必須有()
    25. 非void函式必須用return語句來指定返回值
    26. void型別函式沒有返回值
    27. 若省略返回型別,C89會自動變為int,C99中不合法
    28.  把陣列名傳遞給函式時,陣列名後不加方括號!
    29.  利用陣列型實際引數可以控制陣列的有效性,把無效部分在後期刪去!!!
    30.  宣告多維陣列的形式引數時,宣告可以省略第一維的長度(例如二維陣列,可以不說行數,但是必須制定列數)
    31.  變長陣列宣告時必須先長度引數,再陣列,要讓代表陣列長度的引數先被程式看見
    32.  也可以用*替換陣列內的長度引數,*直接代表陣列長度與形參列表中的前面的引數有關
    33. static可以在陣列引數宣告中使用C99
    34. int a【static 3】代表陣列長度至少為3
    35. 多維陣列的話static僅可用於第一維
    36. 靜態區域性變數static可以在區域性變數的值呼叫結束後,而不釋放,儲存原值。
      • static int a;
    37. 暫存器變數(register變數)代表允許將區域性變數的值放在cpu中提高執行效率
      • register int a;
    38. 擴充套件外部變數的作用域(extern)
      1. extern 外部變數名字;
      2. 代表作用域效果從上一行開始
      3. 再正式定義外部變數
      4. 然後以下的範圍都可使用
      5. 日後測試完善(少用為好)
      6. 加了static變為靜態外部變數後,不可用extern擴大其範圍
    39. 複合字面量是通過指定其包含的元素而建立的沒有名字的陣列(int 【】){…}
    40. 可以使用const把陣列變為只讀
      1. (const int【】){1,1}
    41. return語句:
      1. return 表示式;
    42. 在main函式中也可以用exit來等價替換,形式如下:
      1. 首先必須是在main函式中!
      2. #include<stdlib.h>
      3. exit(表示式);
      4. return 0;可以變為exit(0);
      5. 也可以用exit(EXIT_SUCCESS);
      6. exit(EXIT_FAILURE);
    43. continue語句
      1. 把迴圈轉移到迴圈體末尾之前
      2. 但是沒有跳出迴圈!
    44. continue與goto等效替換
      • while (…) {           while (…) {
      •   …                      …
      •   continue;           goto end;
      •   …                      …
      • }                           end: ; 
      •                              }
    45. break語句
    46. 可以跳出迴圈
    47. 一個break只能跳出最近的一層
    48. goto語句
    49. 使用模版:
      • 識別符號:語句
      • goto 識別符號;
    50. 可以任意跳躍!直接跳出多重迴圈!
    51. 所以優點也是缺點,很容易創造垃圾程式碼
    52. 空語句最好單獨放置在一行,或者用continue;語句或者還可以用{}凸顯一下
    53. 空迴圈一般僅只是用於增加簡潔度,而不會提高效率
    54. 素數判斷可以只檢查不大於n(你輸入的檢驗數)的平方根 的除數
    55. 十進位制不可以0開頭
    56. 八進位制通常以0開頭
    57. 十六進位制通常以0x或0X開頭
    58. 有符號整數型別
      1. short int:%hd
      2. int:%d
      3. long int:%ld(C99可以%lld)
    59. 浮點型別
      1. float:%f,常量末尾加f
      2. double:%lf,末尾加F
      3. long double:%lf,末尾加L
      4. 注意!只能在scanf中使用l,不能在printf函式格式串中使用
      5. long double中scanf和printf都放%Lf
    60. 字元操作
      1. 顯示格式:
        • char sb;
        • sb='a'
        • sb='  '
    61. 字元常量使用時,轉義序列必須用一對單引號括起來:'\33'
    62. getchar返回的是int型的值,儘管它讀入和返回的是字元
    63. %s不能有空格
    64. 使用getchar時必須打括號!!!!!曹尼瑪!
    65. 型別轉換有隱式轉換和顯式轉換
    66. 常用的算術轉換的策略是整值提升
    67.  強制轉換表示式:
      • (型別名)表示式
    68.  型別定義:
      • typedef 型別 名字;
      • 名字 變數,變數,變數;
      • 更容易理解,更有實際意義,容易修改,直接改定義處的型別
      • 型別定義比巨集定義強大,巨集定義還不能定義陣列和指標。
    69.   sizeof表示式:
      • sizeof(型別名)
      • 這個運算子允許程式儲存指定型別值所需的空間的大小
    70.  C語言有兩種聚合型別:陣列和結構
    71.  陣列:
      • 型別 名字【大小】{個體表示,個體表示};
    72.  陣列可以通過在型別名前面加const變成常量陣列
    73. 宣告為常量陣列的陣列不會被程式修改,編譯器也能發現那些有修改他意圖的程式碼
    74.  C99可以使用變長陣列,即使用非常量表達式
    75. 變長陣列的限制在於無初始化值和靜態儲存期限
    76.  在區域性變數宣告中放置static可以使變數具有靜態儲存期限,即擁有永久的儲存單元,即使函式返回,也不會失去他的值。
    77. #define N n等效於sizeof(a)/sizeof(a【0】)
    78. 這是為了解決可能忘記名字的問題
    79. 也可以二者直接組合定義
    80.    #include<string.h>
    81.  gets(陣列) and puts(陣列)
    82.  strcat(字元陣列1,字元陣列2)
    • 效果:把字串2接到1的後面
    • 字串1一定要夠大!
  1.  83.rcpy(字元陣列1,字串2)
    1. 效果:把字串2複製到字元陣列1中
    2. 字串2也可以是字元陣列
    3. 夠大!
  2. strcmp(字串1,字串2)
    1. 從左往右比較不同元素,隨ASCII碼大的為正
    1. 若兩個字串相等,為0
    1. 小於為負
  3. strlen(字元陣列)
    • 測量長度
    • 不包含'\0'
  4. strlwr(字串)
    • 效果:將字串轉化為小寫
  5. strupr(字串)
    • 效果:將字串轉化為大寫
  6. 指標就是地址,指標變數就是儲存地址的變數
  7. 指標變數的宣告:
    • 1.int i;
    • 型別  *p,*q;
    • p=&i;
    • q=&j;
  8.   &:取地址符(&x就是x在記憶體中的地址)*:間接定址符(*p就是i的別名,改變*p的值也會改變i的值)
  9. 對變數使用&會產生指標
  10. 對指標使用*會返回變數
  11.  q=p是把p的內容(i的地址)給了q,即把q指向了p所指向的地方
  12. *q=*p是把p指向的值(i的值)複製給q指向的物件(j的值)
  13. const保護引數:說明p是指向“長整數”的指標。表明函式不會改變指標引數指向的物件。
  14. 陣列指標的元素可以
    • *(p+i)表示陣列p的第i個元素
  15. p+i實質為p+i*(元素所佔位元組)還是位置
  16. 多維陣列中a【1】+1等價於*a(a+1)+1,都表示了a【1】【1】
  17. 指向函式的指標:
    • int(*p)(int)
    • p=f(函式入口)
    • 這是一個指向整形函式,並且這個整形函式還有一個整形引數的函式
    • 呼叫形式為:
    • a=(*p)(n)
    • (*p)(n)等效於f(n)
C語言筆記
    1. 因為預設main為int所以可以直接:
      • main(){
    2. 函式定義不可巢狀
    3. 運算子%%只能用於整數操作
    4. %%要雙標記才能列印
    5. 判等與賦值一定要區分
    6. 不可以在同一個地方,訪問和修改同一個數的數值
    7. 負數操作運算子“/”、“%”時,C89和C99都要確保一個神奇的公式:(a/b)*b+a%d=a
    8. 變數是左值
    9. if(表示式){語句;}
    10. if(表示式){語句;}else語句
    11. if的用法:
      • if(表示式){語句;}
      • else if(表示式){語句;}
      • else if(表示式){語句;}
      • else{語句;}
    12. 條件表示式:
      • 表示式1?表示式2:表示式3
      • 表示式1成立計算表示式2的值
      • 表示式1不成立計算表示式3的值
    13. switch結構:
      • switch(表示式){
      • case 表示式1: case 2: case 3:
        • 語句;break;
      • case 表示式4:
        • 語句;break;
      • default:語句;break;
    14. else語句屬於離他最近的且還未與其他else配對的if語句
    15. 迴圈中
      1. while用於迴圈體執行之前檢驗
      2. do用於迴圈執行之後檢
      3. for用於遞增或遞減計數變數的迴圈
      4. continue語句僅在迴圈可用
    16. while迴圈:
      1. while(表示式)表示式不為0即執行
      2. {語句;}
      3. 如果一來就為0,會一次都不執行直接跳出迴圈
    17. while(1)是一種常用的無限迴圈語句
    18. do迴圈:
      1. do{語句;}while(表示式);
      2. 先執行迴圈,再判定
      3. 至少執行一次迴圈
    19. for迴圈:
      1. for(表示式1;2;3)
      2. 表示式1用來賦初值(迴圈執行前)
      3. 表示式2用來控制迴圈終止
      4. 表示式3(迴圈執行後執行)
      5. 可以等價於
        • 表示式1;
        • while(表示式2){
        • 語句
        • 表示式3;
      6. 必須有兩個分號,表示式1都可以挑出來表達之後省略(;2;3)
    20. 形式引數定義時!每個形參前必須都有其型別說明
    21. 函式定義:
      1. 返回型別 函式名(形式引數)
      2. 宣告;
      3. 語句;
      4. (花括號內的稱為函式體)
    22. 函式呼叫:
      1. 函式名(實際引數);
    23. 函式宣告:
      1. 返回型別 函式名(形式引數);
      2. 注意!這裡有分號!
      3. 原因是形式引數裡面沒有具體的變數名稱,只需要型別
      4. 目的是讓程式進行預備
      5. 如果函式在呼叫前遇到了原型,編譯器會建立一個隱式宣告(也說明函式宣告的重要性!)
      6. 如果函式在呼叫前沒有遇到原型,編譯器會執行預設的實際引數提升
    24. 無實參的函式要呼叫也必須有()
    25. 非void函式必須用return語句來指定返回值
    26. void型別函式沒有返回值
    27. 若省略返回型別,C89會自動變為int,C99中不合法
    28.  把陣列名傳遞給函式時,陣列名後不加方括號!
    29.  利用陣列型實際引數可以控制陣列的有效性,把無效部分在後期刪去!!!
    30.  宣告多維陣列的形式引數時,宣告可以省略第一維的長度(例如二維陣列,可以不說行數,但是必須制定列數)
    31.  變長陣列宣告時必須先長度引數,再陣列,要讓代表陣列長度的引數先被程式看見
    32.  也可以用*替換陣列內的長度引數,*直接代表陣列長度與形參列表中的前面的引數有關
    33. static可以在陣列引數宣告中使用C99
    34. int a【static 3】代表陣列長度至少為3
    35. 多維陣列的話static僅可用於第一維
    36. 靜態區域性變數static可以在區域性變數的值呼叫結束後,而不釋放,儲存原值。
      • static int a;
    37. 暫存器變數(register變數)代表允許將區域性變數的值放在cpu中提高執行效率
      • register int a;
    38. 擴充套件外部變數的作用域(extern)
      1. extern 外部變數名字;
      2. 代表作用域效果從上一行開始
      3. 再正式定義外部變數
      4. 然後以下的範圍都可使用
      5. 日後測試完善(少用為好)
      6. 加了static變為靜態外部變數後,不可用extern擴大其範圍
    39. 複合字面量是通過指定其包含的元素而建立的沒有名字的陣列(int 【】){…}
    40. 可以使用const把陣列變為只讀
      1. (const int【】){1,1}
    41. return語句:
      1. return 表示式;
    42. 在main函式中也可以用exit來等價替換,形式如下:
      1. 首先必須是在main函式中!
      2. #include<stdlib.h>
      3. exit(表示式);
      4. return 0;可以變為exit(0);
      5. 也可以用exit(EXIT_SUCCESS);
      6. exit(EXIT_FAILURE);
    43. continue語句
      1. 把迴圈轉移到迴圈體末尾之前
      2. 但是沒有跳出迴圈!
    44. continue與goto等效替換
      • while (…) {           while (…) {
      •   …                      …
      •   continue;           goto end;
      •   …                      …
      • }                           end: ; 
      •                              }
    45. break語句
    46. 可以跳出迴圈
    47. 一個break只能跳出最近的一層
    48. goto語句
    49. 使用模版:
      • 識別符號:語句
      • goto 識別符號;
    50. 可以任意跳躍!直接跳出多重迴圈!
    51. 所以優點也是缺點,很容易創造垃圾程式碼
    52. 空語句最好單獨放置在一行,或者用continue;語句或者還可以用{}凸顯一下
    53. 空迴圈一般僅只是用於增加簡潔度,而不會提高效率
    54. 素數判斷可以只檢查不大於n(你輸入的檢驗數)的平方根 的除數
    55. 十進位制不可以0開頭
    56. 八進位制通常以0開頭
    57. 十六進位制通常以0x或0X開頭
    58. 有符號整數型別
      1. short int:%hd
      2. int:%d
      3. long int:%ld(C99可以%lld)
    59. 浮點型別
      1. float:%f,常量末尾加f
      2. double:%lf,末尾加F
      3. long double:%lf,末尾加L
      4. 注意!只能在scanf中使用l,不能在printf函式格式串中使用
      5. long double中scanf和printf都放%Lf
    60. 字元操作
      1. 顯示格式:
        • char sb;
        • sb='a'
        • sb='  '
    61. 字元常量使用時,轉義序列必須用一對單引號括起來:'\33'
    62. getchar返回的是int型的值,儘管它讀入和返回的是字元
    63. %s不能有空格
    64. 使用getchar時必須打括號!!!!!曹尼瑪!
    65. 型別轉換有隱式轉換和顯式轉換
    66. 常用的算術轉換的策略是整值提升
    67.  強制轉換表示式:
      • (型別名)表示式
    68.  型別定義:
      • typedef 型別 名字;
      • 名字 變數,變數,變數;
      • 更容易理解,更有實際意義,容易修改,直接改定義處的型別
      • 型別定義比巨集定義強大,巨集定義還不能定義陣列和指標。
    69.   sizeof表示式:
      • sizeof(型別名)
      • 這個運算子允許程式儲存指定型別值所需的空間的大小
    70.  C語言有兩種聚合型別:陣列和結構
    71.  陣列:
      • 型別 名字【大小】{個體表示,個體表示};
    72.  陣列可以通過在型別名前面加const變成常量陣列
    73. 宣告為常量陣列的陣列不會被程式修改,編譯器也能發現那些有修改他意圖的程式碼
    74.  C99可以使用變長陣列,即使用非常量表達式
    75. 變長陣列的限制在於無初始化值和靜態儲存期限
    76.  在區域性變數宣告中放置static可以使變數具有靜態儲存期限,即擁有永久的儲存單元,即使函式返回,也不會失去他的值。
      1. #define N n等效於sizeof(a)/sizeof(a【0】)
  • 這是為了解決可能忘記名字的問題
  • 也可以二者直接組合定義
  1.  #include<string.h>
  2. 相關推薦

    C語言基礎知識筆記:day4字串與字元陣列

    注:本筆記為直接上傳,因各個markdown筆記語法的差異性,在顯示上略有區別。 如需原版請聯絡:[email protected]。(郵件主題為:學習筆記,正文需要的筆記名,可以直接複製該筆記的網址)。同時歡迎各位一起學習交流。 day4字串與字元陣

    C語言基礎知識筆記:day5記憶體管理

    day10 記憶體管理 @toc 一、變數作用域 全域性變數和區域性變數 一個C語言變數的作用域可以是程式碼塊,作用域就是函式作用域或者檔案作用域 程式碼塊:{}之間的一段程式碼; 1.檔案作用域: 如果一個變數在其他的程式碼檔案中已經定義了,可以在本程式中使用

    C語言基礎知識筆記

    C語言筆記 因為預設main為int所以可以直接: main(){ … } 函式定義不可巢狀 運算子%%只能用於整數操作 %%要雙標記才能列印 判等與賦值一定要區分 不可以在同一個地方,訪問和修改同一個數的數值 負

    C語言基礎知識整理

    除法 當前 www 做到 初步 編寫 main函數 配對 十進制數 用一個簡單的c程序例子,介紹C語言基礎知識的基本構成、格式、以及良好的書寫風格,使小夥伴對c語言有個初步認識。 例1:計算兩個整數之和的c程序: #includemain(){int a,b,sum;

    C語言基礎知識

    sig 指向 開始 extern strong font 寬度 main bsp printf函數向終端輸出若幹個任意類型的數據。 表示輸出類型的格式字符     格式字符意義 a 浮點數、十六進制數字和p-計數法(C99) A

    程序設計入門-C語言基礎知識-翁愷-期中測試

    第一條 情況下 不出 等價 循環結構 true 語句 tdi ive 一、試題 程序設計入門—C 語言期中測評1 在代碼:while ( !e )中,!e 等價於:A.e ==0 B. e != 1 C. e!=0 D. e == 12. 以下代碼片段的輸出是:int j=

    C語言基礎複習筆記(一)指標

    最近linux很火,年前對linux再詳細瞭解了個大概,結合在windows平臺活躍與強大無比的C++,最終得出一個結論:C語言依然強大。 過年回來,便對的C語言充滿了興趣,於是乎去網上下載了教程回來,細細研讀,基礎程式設計思想始終是很重要的。 首先,入手的便是C語言的核心精華部分,指標。要

    C語言基礎知識(一)結構體struct 和typedef struct區別

    C與C++中struct 和typedef struct區別從三個方面對比 1、宣告變數方便: 在C語言中,常常見到typedef修飾結構體,如: #include<stdio.h> typedef struct _TEST { int value; char mat

    C語言基礎知識(期末嘍)

    演算法結構:一、順序結構、選擇結構、迴圈結構;二、迴圈結構又分為while型、until型、for迴圈結構;程式流程圖; 結構化程式設計方法:(1)自頂向下;(2)逐步細化;(3)模組化設計;(4)結構化編碼。 資料型別: 常量:常量包括字面常量、直接常量和符號常量; 變數:C語言規定標誌符只能由字母

    C語言基礎知識——malloc

    1、 malloc : 在堆上分配空間 void *mall (size_t size); 引數:要分配的空間大小,單位是位元組 返回值: 如果分配成功指向分配的空間 如果分配失敗,返回NULL free :釋放堆上的空間 void free(void *ptr); 引數:指向要釋放的空

    C語言基礎知識——define、static、const

    **1、**使用巨集函式的程式舉例: #include <stdio.h> #define PI 3.14 #define ADD(x, y) (x+y) #define MAX(x, y) ((x>y)?(x):(y)) int add(int x, int y)

    C語言基礎知識——結構體

    1、C語言中提供了一些由系統已經定義好的資料型別,如:int,float,char等,使用者可以在程式中用它們定義變數,解決一般的問題,但人們要處理的問題往往比較複雜,只有系統提供的型別還不能滿足應用的要求,C語言允許使用者根據需要自己建立一些資料型別,用它來定義變數。 2、C語言允許使

    C語言基礎知識——函式2

    1、通過return語句將函式值帶回到主調函式。 注:通常希望通過函式呼叫使主函式得到一個確定的值,這就是函式值(函式的返回值)。 如果函式不需要返回值,則不需要return語句。這時函式的型別應定義為void型別。 注:實參和形參在記憶體中佔不同夫人儲存單元,實參無法得到形參的值。 在定義

    【修煉C++】基礎知識筆記-第7章 類

    1 this  任何對類成員的直接訪問都被看成this的隱式引用,this是一個常量指標 (class *const),不允許改變this中儲存的地址。 常量成員函式:在引數列表後面加一個const,表示this是一個指向常量的指標(const class *const thi

    C語言基礎知識 ---------- 指標(pointer)、結構(structure)

    指標(pointer) 指標變數是一種特殊的變數,此變數儲存的內容不是普通值(int double char......)而是其它變數的地址(address)。 指標宣告:資料形態  *變數名   ---->    int 

    C語言基礎知識:#if 0 或 #if 1(C語言註釋)

    C語言註釋有三種方法 常見的方法有:1)單行註釋: //                           2)多行註釋: /* */ 今天我想和初學者來聊聊一種相對不那麼熟悉的C語言註釋方法:利用條件編譯註釋程式碼。 3)#if 0  或  #if 1註釋: 當

    C語言基礎學習筆記day3

    date:‘2018-9-9’ nandian:迴圈的巢狀 day5 @toc 一、一維陣列 1.定義陣列 #include<stdio.h> int main() { int array[10]; //定義了一個數組,陣列名為array,

    C語言基礎學習筆記:day5 指標

    注:本筆記為直接上傳,因各個markdown筆記語法的差異性,在顯示上略有區別。 如需原版請聯絡:[email protected]。(郵件主題為:學習筆記,正文需要的筆記名,可以直接複製該筆記的網址)。同時歡迎各位一起學習交流。 day5指標 文章目錄

    C語言基礎學習筆記day1

    注:本筆記為直接上傳,因各個markdown筆記語法的差異性,在顯示上略有區別。 如需原版請聯絡:[email protected]。(郵件主題為:學習筆記,正文需要的筆記名,可以直接複製該筆記的網址)。同時歡迎各位一起學習交流。 基本入門知識 1.第一個c程式 #

    #C語言基礎知識歸納和例題分析(1)

    ## C語言基礎知識歸納和例題分析(1) 計算機程式和計算機語言 1.程式 就是一組計算機能識別和執行的指令 2.計算機語言經歷的幾個階段 機器語言(直接執行)→符號語言(又稱組合語言)→高階語言 3.高階語