天天看點

黑馬程式員_object c學習日記_c語言部分

-------------------------------------- android教育訓練、java教育訓練、ios教育訓練期待與您交流! ---------------------------------

C程式入口main函數;

1.    編寫代碼

2.    編譯:把c語言代碼編譯成0和1

工具:clang編譯器(Xcode3 gcc Xcode4 llvm(clang))

指令:cc –c 檔案名.c(生産.o檔案)

3.    連結:将.o檔案和系統自帶函數庫合并生成可執行檔案

指令:cc 檔案名.o(生産可執行檔案a.out)

4.    運作

指令:./檔案名

注意:cc 檔案名.c –o xxx(編譯連結一起,生産可執行檔案xxx)

注釋:

1.    單行注釋:從//開始到這行結尾

2.    多行注釋:以結尾,中間都是注釋

注釋作用:

1.    不參與編譯

2.    檢查代碼作用

3.    排除錯誤

資料

1.    靜态資料:指一些永久資料

2.    動态資料:指在程式運作過程中,動态産生的臨時資料

c語言資料類型:

1.    基本資料類型:整形int、單精度浮點型float、雙精度浮點型double、字元型char

2.    指針類型:void *

3.    構造類型:結構體struct、共用體union、枚舉enum

4.    空類型:void

記憶體分析:

1.    記憶體尋址是由大到小的,優先配置設定記憶體位址比較大的位元組給變量

2.    變量越先定義,記憶體位址越大

3.    取得變量的位址:&變量名

4.    輸出位址:%p

5.    一個變量一定要先進行初始化,才能使用

運算符:

算術運算符:+、-、*、/、自加、自減、sizeof

關系運算符:>、<、>=、<=、==、!=

邏輯運算符:&&、 ||、!

三目運算符:條件 ? 數值1 : 數值2

流程控制:

1.    順序結構:預設

2.    選擇結構:條件成立執行

3.    循環結構:在一定條件下,反複執行

選擇結構:if

1.    if(條件) {語句;}

2.    if(條件) {語句;}else{語句;}

3.    if(條件) {語句;}else if(條件){語句;}else{語句;}

4.    if(條件) 語句;

選擇結構:switch

switch (數值)

{

case 數值1:

    語句1;

    break;

case 數值2:

    語句2;

    break;

default:

    語句3;

    break;

}

如果在case裡面定義新變量,必須使用大括号{}

循環結構:

1.    while(條件) {語句;}

2.    do {語句;} while(條件);

3.    for (語句1; 條件; 語句2) {語句3;}

continue; // 跳過本次循環,進入下一次循環

break; // 跳出循環,不再進行循環

函數聲明:傳回值類型函數名(參數類型參數名);

函數定義:傳回值類型函數名(參數類型參數名)

{

    語句;

}

實參:調用函數時傳入的資料

形參:函數内部儲存傳入資料的變量

注意:

1.    預設情況下,不允許有函數名稱一樣

2.    函數不能嵌套定義

3.    函數不能重複定義,但可以重複聲明

4.    函數隻聲明不定義,可以通過編譯,但是無法通過連結

include:拷貝檔案所有内容到目前位置,<>表示從系統預設位置查找,””表示從使用者目前路徑查找

進制:十進制、二進制、八進制、十六進制

1.    預設情況下是十進制

2.    0b/0B開頭表示二進制

3.    0開頭表示八進制

4.    0x/0X開頭表示十六進制

%d\%i 以10進制整數形式輸出數值

%c 輸出字元

%p 輸出位址

%f 輸出小數

%o 八進制形式輸出整數

%x 十六進制形式輸出整數

記憶體存儲細節:

int number = 12; // 0000 0000 0000 00000000 0000 0000 1100

位址 變量 内容
Ff00 number 0000 1100
Ff01 0000 0000
Ff02 0000 0000
Ff03 0000 0000
Ff04

1.    按位與&:與0為0,與1保持原位

2.    按位或|:或0保持原位,或1為1

3.    按位異或^:相同為0,不同為1

4.    按位取反~:0取反1,1取反0

5.    左移<<:高位丢棄,低位補0

6.    右移>>:低位丢棄,高位補符号位

數組:類型數組名[元素個數];

數組作為函數參數會退化為位址

二維數組:類型數組名[數組個數][元素個數];

指針:類型 *變量名;

指向指針的指針:類型 **變量名;

局部變量:在函數(代碼塊)内部定義的變量;從定義變量哪一行開始配置設定空間,一直到代碼塊結束被回收;沒有初始值

全局變量:在函數外定義的變量;程式一啟動就會配置設定空間,程式退出時才會被銷毀;預設初始值為0;

結構體:可以由多個不同類型的資料構成

定義結構體類型時并不會配置設定存儲空間;定義結構體變量時才真正配置設定空間;

指向結構體指針:struct Student *stu;

利用指針通路結構體成員:(*stu).成員名稱;stu->成員名稱;

枚舉enum:變量隻具有固定的值

預處理指令:在代碼被翻譯成0和1之前進行的動作;所有預處理指令都是以#開頭

1.    宏定義:

#define SUM(a, b) ((a) + (b))

#define COUNT 5

2.    條件編譯

#ifndef AAA

#define AAA

#if defined(AAA)

#endif

#endif

3.    檔案包含

#include <stdio.h>

#include “aaa.h”

typedef關鍵字:

typedef int MyInt;

typedef char * String;

typedef struct Student {

int age;

int no;

} Student;

typedef int (*SUM)(int a, int b);

static關鍵字和extern關鍵字

修飾函數:

1.    static修飾定義内部函數,其他檔案無法通路;

2.    extern修飾定義外部函數,其他檔案可以通路,預設情況下所有函數是外部函數

修飾全局變量:

1.    static修飾定義内部變量,其他檔案無法通路

2.    extern修飾定義外部變量,其他檔案無法通路;預設情況下所有全局變量都是外部變量

修飾局部變量:

1.    static修飾局部變量,所有調到同一函數都共享這個變量,作用域沒有變化,但是生命周期到程式結束才被銷毀;

遞歸的2個條件:

1.    函數自己調用自己

2.    必須有明确的終止條件

 -------------------------------------- android教育訓練、java教育訓練、ios教育訓練期待與您交流! ---------------------------------