<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      c語言學習

      c語言學習

      預備知識

      gcc
      編譯器, 預處理(后綴名.i; 去除注釋, 處理以#開頭的, #ifdef #include) -> 編譯(.o目標文件) -> 匯編 -> 鏈接

      步驟

      1. 預編譯 gcc -E 文件名 -o .i為后綴的文件
      2. 編譯, 生成匯編 gcc -S 預編譯的.i文件 -o .s為后綴的匯編語言
      3. 匯編過程, gcc -c .s為后綴的匯編語言 -o .o為后綴的目標代碼
      4. 鏈接, gcc .o為后綴的目標代碼 -o 要鏈接的文件名

      想要調試 需要加上 -g
      gcc -o 要編譯的文件名 編譯的c文件

      1. 枚舉: 吧一個一個的可能性都列舉出來,然后一個一個的去試,直到找到能夠滿足我們條件的
      2. 解釋: 借助一個程序, 并且這個程序能夠理解我們寫的程序, 然后按照要求指定
      3. 編譯: 借助一個程序, 并且這個程序能夠將我們寫的程序翻譯成計算機能夠懂的語言, 然后直接交給計算機執行就好了

      兩個整數的計算結果只能是整數,當浮點數和整數放在一起運算時,會將整數轉換成浮點數,然后再進行浮點數的運算

      表達式是一系列運算符和算子的運算
      運算符是指進行運算的動作, 比如加減運算符
      算子是參與運算的值,可能是常數,也可能是變量,還有可能是一個函數的返回值

      變量

      1. 變量必須先聲明后使用
      2. 各條語句均為分號結束

      通用規則: 在允許使用某種類型變量值的任何場合,都可以使用該類型的更復雜的表達式

      #define指令可以把符號名(或者符號常量)定義為一個特定的字符串:
      替換文本可以是任何字符序列,而不僅僅是數字
      語法: #define 名字 替換文本

      在c語言中,所有的函數參數都是通過 值 傳遞的

      通常把extern聲明放在一個單獨的文件中(習慣上稱為頭文件),并在每個源文件的開頭使用#include語句吧索要用的頭文件包含進來
      后綴名 .h 預定為頭文件名的擴展名

      extern關鍵字: 需要在一個源文件中引用另一個源文件中定義的變量

      #define是在預編譯階段展開,不分配內存,const常量是編譯運行階段使用,分配內存

      define(定義) 表示創建變量或分配儲存單元
      declaration(聲明) 指的是說明變量的性質,但并不分配儲存單元

      printf()函數:

      1. %d 表示按照十進制整數打印
      2. %6d 按照十進制整數打印,至少6個字符寬
      3. %f 按照浮點數打印
      4. %6f 按照浮點數打印,至少6個字符寬
      5. %.2f 按照浮點數打印,小數點后面有兩位小數字
      6. %6.2f 按照浮點數打印,至少6個字符寬,小數點后面有兩位小數字

      全局變量和局部變量在內存中的區別:

      1. 全局變量保存在內存的全局儲存區中,占用靜態的儲存單元
      2. 局部變量儲存在棧中,只有在所在的函數被調用時才會動態的為變量分配儲存單元

      變量和常量

      變量,常量是程序處理的兩種基本數據對象

      變量聲明
      變量聲明向編譯器保證變量以指定的類型和名稱存在,變量聲明有兩種情況

      1. 一種是需要建立儲存空間的,如int a在聲明時都已經建立了空間
      2. 另一種是不需要建立儲存空間的,通過extern關鍵字聲明的變量而不定義它,例如 extern int a 其中變量a可以在別的文件中定義

      數據類型:
      void類型: 指定沒有可用的值

      1. 函數返回值為空
      2. 函數參數為空
      3. 指針指向void: 類型為void*的指針代表對象的地址,而不是類型.例如 內存分配函數void*malloc(size_t size); 返回指向void的指針,可以轉換為任何數據類型

      基本數據類型
      char 字符型, 占一個字節,
      int 整形, 反映了所用機器中整數的自然長度
      float 單精度浮點型
      double 雙精度浮點型

      short和long限定符(用于整型, int可以省略):
      short int sh; 通常為16位
      int 為16位或者32位,在short和long之間
      long int counter; 通常為32位

      類型限定符signed與unsigned(用于char或整型):
      unsigned類型的數總是0或正值

      const常量:

      1. long型常量以字母l或L結尾,
      2. 無符號常量(unsigned)以字母u或U結尾,
      3. 后綴ul或UL表明是unsigned long結尾
      4. 沒有后綴的浮點型常量是double類型, 后綴為f或F表示是float類型;后綴是l或L 表明是long double類型

      字符常量也叫字符串字面量, 就是用雙引號括起來的0個或多個字符組成的字符序列

      字符常量和僅包含一個字符的字符串之間的區別: 'x'和"x"是不同的, 前者是一個整數,其值是一個整數, 其值是字母x在機器字符集中對應的數值(內部表示值);后者是一個包含了一個字符(字母x)以及一個結束符'\0'的字符數組

      任何變量的聲明都可以使用const限定符限定,該限定符指定變量的值不能被修改; 對數組而言, const限定符指定數組所有元素的值都不能被修改

      運算符
      算數運算符, 關系運算符, 邏輯運算符

      類型轉換
      類型轉換:當一個運算符的幾個操作數類型不同時, 就需要通過一些規則吧他們轉換為某種共同的類型

      自動類型轉換: 吧"比較窄的"操作數轉換為"比較寬的"操作數, 并且不丟失信息的轉換

      自動類型規則:

      • 如果其中一個操作數為long double, 則將另一個操作數轉換為long double類型
      • 如果其中一個操作數為double類型, 則將另一個操作數轉換為double類型
      • 如果其中一個操作數的類型為float, 則將另一個操作數轉換為float類型
      • 將char與short類型的操作數轉換為int類型
      • 如果其中一個操作數的類型為long, 則將另一個操作數也轉換為long類型
      • 字符類型的變量都將被轉換為整型變量

      表達式float類型的操作數不會轉換為double類型

      強制類型轉換: 強制類型轉換只是生成一個指定類型的n的值, n本身的值并沒有改變.

      按位操作符

      • &(按位與): 按位與經常用于屏蔽某些二進制位
      • |(按位或): 按位或常用于將某些二進制位置為1
      • ^(按位異或): 按位異或運算符^ 當兩個操作數的對應位不相同時將該位位置設為1,否則設置為0
      • 移位運算符<<(左移)>>(右移): 左移乘以2的幾次方,右移除以2的幾次方
      • ~取反: 加一取反

      流程控制語句

      • if else 分支,盡可能減少循環語句中的判斷次數
      • switch 多路判斷
      • while
      • for
      • do{} while();

      break和continue

      goto語句: 最常見的用法是終止程序在某些深度嵌套的結構中的處理過程

      函數與程序結構

      函數是吧大的計算任務分解成若干個小的任務

      c中的儲存類

      c中的儲存類定義了程序中變量/函數的儲存范圍(可見性)和聲明周期

      1. auto: 所有局部變量默認的儲存類,只能用在函數中,就是說它只能修飾局部變量
      2. register: 儲存類用于定義儲存在寄存器而不是RAM中的變量; 這意味著它的最大尺寸等于寄存器的大小,且不能對他使用一元"&"運算符,(因為它沒有內存位置)
      3. static: 全局聲明的static變量或方法可以被任何函數或方法調用,前提是這些方法跟static變量或方法在同一文件中
        1. 修飾局部變量時,指示編譯器在程序的生命周期內保持局部變量的存在,因此,使用static修飾的局部變量可以在函數調用之間保持局部變量的值
        2. 修飾全局變量,會使全局變量的作用域限制在聲明它的文件中
      4. extern: 用于提供一個全局變量的引用,全局變量對所有文件都可用。當使用extern時,對于無法初始化的變量,會把變量名指向一個之前定義過的儲存位置
        • 當有多個文件且定義了一個可以在其他文件中使用的全局變量或函數時,可以在其他文件中使用extern來得到已定義的變量或函數的引用。
        • 可以這么理解,extern是用來在另一個文件中聲明一個全局變量或函數
        • extern修飾符通常用于當有兩個或多個文件共享相同的全局變量或函數時使用

      數組

      數組表示一段連續的,固定長度(長度不可改變)且類型相同的儲存空間

      聲明定義數組

      1. 指定長度和元素: int arr[5] = {1, 2, 3, 4, 5};
      2. 不指定長度,編譯器會根據值的多少來計算出數組的長度: int arr[] = {1,2,3,4,5};
      3. 指定部分元素,其余的元素取默認值(整型是0,字符型是'\0',指針是NULL): int arr[5] = {1,2,3};
      4. 指定數組的默認值: int arr[5] = {0,0,0,0,0} 等價于=> int arr[5] = {0};

      取值賦值

      數組的下表是從0開始的,并且數組中的每一個元素都屬于同一個數據類型

      定義數組: 數組類型 數組名[長度]
      取值: 數組名[下標]
      賦值: 數組名[下標] = 值

      多維數組

      // 多維數組類似與矩陣
      // 聲明多維數組
      int arr[2][3] = {{1,2,3}, {4,5,6}};
      // 可以只是用一個大括號,編譯器會自動算出
      int arr1[][3] = {1,2,3,4,5,6};
      // 可以不指定第一維的長度,編譯器會自動算出,但是必須指定第二維或更高維度的長度
      int arr2[][3] = {1,2,3,4,5,6};
      
      // 遍歷多維數組
      // 1. 直接遍歷
      void print_a(int arr[][3], int n, int m) {
          int i,j;
          for(i = 0; i < n; i++) {
              for(j = 0; j < m; j++) {
                  printf("%d ", arr[i][j]);
              }
              printf("\n");
          }
      }
      // 2. 將一維度指定為一個指針
      void print_b(int (*arr)[3], int n, int m) {
          int i,j;
          for(i = 0; i < n; i++) {
              for(j = 0; j < m; j++) {
                  printf("%d ", arr[i][j]);
              }
              printf("\n");
          }
      }
      // 3. 降維的方式
      // 調用方式print_c(&arr[0][0], 第一維長度, 第二維長度)
      void print_c(int *a, int n, int m) {
          int i,j;
          for(i = 0; i < n; i++) {
              for(j = 0; j < m; j++) {
                  printf("%d ", *(a + i * m + j));
              }
              printf("\n");
          }
      }
      

      傳遞數組給函數

      // 需要告訴編譯器函數將要接受一個指針
      // 所以需要以下三種方式來聲明函數
      // 1. 形參是一個指針
      //    指針指向的是數組的第一個元素,
      //    可以使用 *(param + 1), 來訪問數組的第2個元素
      void myFunction(int *param) {
          printf("%d ", *param);
          // 訪問數組第二個元素
          printf("%d ", *(param + 1));
      }
      
      // 指向數組的指針
      // 以下測試數組和 以指針方式傳入函數
      int main(){}
          int arr[5] = {1,2,3,4,5};
          printf("%p \n", arr);  // 打印數組的地址
          printf("%p \n", &arr[0]);  // 打印數組第一個元素的地址
          printf("%p \n", &arr[1]);  // 打印數組的第二個元素的地址
          void tranArr(int *p);
          tranArr(arr);
          return 0;
      }
      void tranArr(int *p) {
          // 1. 通過 p[下標] 來訪問數組元素
          // 2. 通過 *(p + 下標) 來訪問數組的當前下標的元素
          // printf("%d ", *p);
          // printf("%d ", *(p + 1));
          printf("%p \n", p);  // 打印指針的地址,可以看出與數組和數組第一個元素的地址一樣
          printf("%p \n", &p[1]);  // 打印數組第二個元素的地址,可以看出與數組的第二個元素的地址一樣
          for(int i=0;i<5;i++) {
              printf("%d ", p[i]);
          }
      }
      
      // 2. 指定長度的形參數組形式
      void myFunction1(int arr[10]) {
      }
      
      // 3. 不指定長度的形參數組形式
      void myFunction2(int arr[]) {
      }
      

      字符數組

      數組中的元素都是字符(以單引號括起來的并且只有一個單詞或符號);取值,賦值和整型數組都一樣

      聲明字符數組
      char carr[5] = {'a','b','c','d'};
      char carr1[5] = {'\0'};

      字符串
      c語言中使用字符數組表示字符串,字符串是由一個一個字符組成,\0標志著字符數組的結束

      聲明字符串

      // 聲明一個字符串 abc; 注意: \0是字符串的結束標識符
      char str1[4] = {'a','b','c','\0'};
      char str2[] = {"abc"};
      char str3[] = "abc";
      

      枚舉enum

      聲明枚舉類型 語法: enum 枚舉名 {枚舉元素1, 枚舉元素2, 枚舉元素3, ...}

      以上僅僅是對枚舉類型的聲明,要想使用還需要定義枚舉變量,c中枚舉是當作int或unsigned int 來處理的

      // 1. 先聲明枚舉類型后定義枚舉變量
      enum week {
          MON = 1,
          TUE,  // 以下會在MON的值基礎上自動加1
          WED,
          THU,
          FRI
      };
      enum week w = MON;  // 聲明定義枚舉變量,并賦值為 MON
      
      // 2. 聲明并定義枚舉變量
      enum week1 {
          MON = 1,
          TUE,
          WED,
          THU,
          FRI = 10
      } we;
      
      // 3. 省略枚舉名稱,直接定義枚舉變量
      enum {
          MON,
          TUE,
          WED,
          THU,
          FRI
      } wee;
      
      // 可以將整型變量強轉為枚舉類型
      enum week {
          MON,TUE,WED
      }
      int main() {
          int a = 1;
          // 1. 定義枚舉變量
          enum week wee = FRI;
          // 2. 強轉
          wee = (enum week)a;
      }
      
      posted @ 2021-03-07 12:36  final老A  閱讀(94)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 欧美肥老太牲交大战| 大又大又粗又硬又爽少妇毛片| 亚日韩精品一区二区三区| 精河县| 开心激情站一区二区三区| 精品亚洲精品日韩精品| 男人狂桶女人高潮嗷嗷| 久久一亚色院精品全部免费| 欧美三级中文字幕在线观看| 亚洲欧美在线观看品| 梁河县| 国产av一区二区不卡| 精品无码国产自产拍在线观看蜜 | 99久久机热/这里只有精品| 国产成人久久777777| 国产精品自产在线观看一| 久久国产乱子伦免费精品无码| 韩国无码AV片午夜福利| 天天做日日做天天添天天欢公交车| 内射干少妇亚洲69xxx| 国产精品久久无码不卡黑寡妇| 巨大黑人极品videos精品| 欧美福利电影A在线播放| 中文字幕在线视频不卡一区二区| 日本做受高潮好舒服视频| 热久久这里只有精品国产| 精品国产av无码一区二区三区 | 江华| 国产AV福利第一精品| 色偷偷女人的天堂亚洲网| 天堂网国产| 99久久亚洲综合精品成人网| 久久精品成人无码观看免费| 人妻日韩人妻中文字幕| 久久国产精品老女人| 最近高清中文在线字幕在线观看| 亚洲中文字幕一二区日韩| 久久久久免费看黄a片app| 久久精品视频这里有精品| 成年女人片免费视频播放A| 久久亚洲精品情侣|