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__