1.大符號類型->小符號類型(位截斷)

 小符號類型->大符號類型(位拓展)

2.按照數據在內存中的不同存儲方式,分為不同的數據類型:內建類型/構造類型/空類型

3.short 2(字節)   int 4(字節)  long 4(字節,32位機)  longlong 8(字節,32位機)

 float 4(字節)   double 8(字節)  longdouble 16(字節)

 隱式數據類型轉換:低->高

4.三目運算符

 a>b?a:c>d?c:d 等價于 a>b?a:(c>d?c:d) 因為三目運算符是由右向左結合的

5.sizeof

 作用:用於獲取某種類型數據所需空間的大小。

 a.後跟類型必須加()/後跟表達式可不加()

 b.sizeof表達式不進行求值,只是根據類型轉換規則求的該表達式的類型,

   然後把這種類型所占的字節數作為sizeof表達式這整個表達式的值,即在

sizeof中不能完成表達式的計算。

6.typedef

 作用:用於對某種類型取一個新的別名

 用法:1.先按照變量定義形式寫出

       2.在以上形式的開頭添加typedef

       3.原來放在變量位置上得標誌符被先當做類型的別名看待

7.左值時可訪問存儲的區域,能改變;變量是,常量不是;

 a.能夠放在賦值符左側的數據時左值,能夠使用++、--、*(指針的間接應用運算符)的也是左值

 b.變量當做左值、右值使用時,含義是不同的。

   作為左值時:是訪問存儲區域

   作為右值時:是訪問其內容

8.if/else 適用於模糊匹配       if成了的條件()內非0

 switch case 適用於簡單匹配

9.break 跳出本層for循環

 continue 跳出本次循環




1.指针---地址

 内存是按字节统一编址

 顺序编址  每一个字节单元有一个编号

           每个字节编号的长度一致

2.指针变量--存放地址值的变量

 某个内存单元可以存放一个地址值

 存放地址值的单元应为4字节(32位系统中指针变量的大小ILP32)

 能够决定存放的指针指向的数据类型

 决定指针变量进行加减整数时实际改变的字节数

3.指针变量定义之后,应指向可操作的空间

 相同类型的指针变量可进行赋值操作

 指针变量本身总是可读写的

4.泛型指针 void *

 泛型指针可以和任意类型的变量完成隐式转换

 可以定义void *类型的变量,不能定义void类型的变量,因为系统不知道应该给void类型变量分配多少字节空间,同样不可以直接对void *型的指针  进行间接引用操作。

5.*p++, *(p++), 先執行在後移   *++p, *(++p)先後移在執行   (*p)++ 取出值加1

6.最重要的一个就是可以实现多个返回值。(从函数带回多个值)

 函数不能返回数组

 函数返回指针值:不能返回局部变量的地址







1.變參函數必須至少有一個參數,因為要根據該值,獲得要處理數據的首地址

2.const int a=3;


int *p;


p=&a;


printf("%d\n",a);


*(int *)&a=4;


printf("%d\n",a);


*p=5;


printf("%d\n",a);

   *(int *)&a等價于*p

3.程序建立映射之後還可以通過兩種方法建立映射malloc、動態加載

4.給可執行文件創建軟連接,可用於多個文件略有差別的情況

5.段錯誤有兩種①讀寫皆不允許或不存在

    ②訪問了只讀的區域

6.查看符號變 eg:nm a.out

7.NULL 是一個泛型指針((void*)0)

8.函數體是一個複合語句

9.聲明是符號問題,定義是內存問題

10.extern 聲明外部變量,不能賦值

11.main(int argc,char *agrv[],char *env[]) argc:參數個數 argv:參數數組  env:環境變量

12.全局變量未初始化或初始化為0,是其放到.bss的結果

13.棧與數組的異同

  ①數組:隨機存取            棧:先進後出

  ②數組:數組各下標隨機存取  棧:函數對棧頂元素,進行出入操作

  可以用數組,模擬實現棧

14.od -tx1 -tc t 將可執行文件以十六進制和文本方式顯示出來

15.操作系統有許多系統調用,每個系統調用完成特定的功能

16.符號 彙編->地址

編譯原理 強符號:函數名/初始化的全局變量

                弱符號:未初始化的全局變量

  強符號遇到弱符號:弱符號自動退化為聲明

  弱符號遇到弱符號:視編譯器而定

  強符號遇到強符號:出錯

17.malloc返回void * 用完之後free() p=NULL

18.傳出參數

  函數參數是指針

  在函數內部間接引用

  在函數調用前參數指向的存儲空間無意義

  在函數調用後,參數有意義,並作為參數返回值返回

19.define INT int*

  INT a,b;   int *a,b;

  typedef int* INT

  INT a,b;   int *a,*b;

20.0000-0111 0-7

  1111-1001 -1--7

  1000 人為規定

21.menset 清空某塊區域、其每次操作的最小單位為一個字節,與數據類型無關

  getchar從輸入流中獲取用戶輸入的最後一個字符

  使用make命令,文件名只能為makefile/Makefile

  makefile中%嚴格匹配變量名

  在預處理命令中\表示續行符

  內聯時最好的宏、但其本質是函數

22.push的兩種方式  先壓棧,後移棧頂指針

                  先移棧頂指針,後壓棧

  %ebp 棧基指針      %esp 棧頂指針       %eip 指令指針,cpu要取址的地址

 call 跳轉   將其下條地址壓棧

 leave push/mov 兩條指令的逆操作

 ret call 指令逆操作

 兩個函數調用中ebp---esp之間的內存塊,稱為函數棧幀

 站上不能存放大量數據,若有大量數據要存放到堆上

23.一些系統宏函數

  函數名__func__,

  時間__TIME__,

  日期__DATE__,


  行號__LINE__,

  文件名__FILE__