資料型別和指標
首先都是定義乙個變數的資料型別,從右到左判斷
int a;a是乙個整數
int *a;a是乙個指標,指標指向int整數
int **a;a是乙個指標,指標指向另乙個指標,另乙個指標指向int整數
int a[10];帶有中括號是標識a是乙個陣列,陣列內都是int整數
int *a[10];右邊是中括號,標識a是乙個陣列,陣列內都是指標,指標都指向int整數
int (*a)[10];括號改變優先順序,a是乙個指標,往右指向乙個陣列(中括號判斷),陣列內部是int整數
int a(int b);右邊是括號,標識a是乙個函式,引數是int,返回是int
int (*a)(int b);括號改變優先順序,a是乙個指標,右邊是括號,標識這個指標指向乙個函式,引數int,返回int
int (*a[10])(int b);括號內,a是乙個陣列,陣列內都是指標,指標都指向函式
預編譯,展開巨集,編譯變成二進位制,連線多個檔案為乙個可執行檔案
static修飾區域性變數,改變的是其儲存型別為靜態區,靜態區有顯示初始化data和未初始化的bss
static修飾全域性變數,改變的是鏈結屬性,external變internal,別的.o檔案無法訪問,作用域不變
static修飾函式,改變的是鏈結屬性,external變internal,別的.o檔案無法訪問,作用域不變
作用域識別符號能被訪問的**區域大小
有**塊作用域是大括號,檔案作用域是整個檔案全域性變數或者函式,原型作用域是形參防止內部定義重複導致無效
已經定義的變數無法改變其鏈結屬性,區域性變數可以遮蔽全域性變數,全域性變數extern技術上無必要新增
const只是修改readonly屬性,和儲存無關
位圖操作
#define bit3 (0x1<<3);static a;
void set_bit3(void)
void clear_bit3(void)
直接修改位址
int *ptr;ptr = (int*)0x679a;*ptr = 0x55;
強制型別轉換,無符號數的運算優先順序要高於有符號數
指標和引用,在資料型別右邊是引用int &a = b;在=號右邊是取位址int *a = &b;
引用不能為空,指向不能改變,++操作是對變數操作,指標則會改變指向
引用大小是變數大小,指標是乙個指標大小
引用不能為空,指標可以為空
引用更加安全
取位址&,得到的是乙個指標,注意指標指向的是乙個資料型別,可能是陣列哦
int a[5],&a,得到的指標,指向乙個5個int的陣列,&a+1,就是加了5個int大小哦
int *p = &a;a+1;p+1;都是表示陣列的首位址的加減乙個int大小
open,popen,fopen
open是unix和linux的標準系統級的輸入輸出,依賴作業系統,一般開啟裝置檔案,不能移植
popen是在通過fork或者pipe,建立管道,/bin/sh -c執行命令,一般是shell命令列
fopen是將檔案讀到緩衝區,借助檔案結構體指標訪問
返回陣列指標和引用
讀萬卷書,行萬里路 木子成 使用原型 型別別名 decltype 尾置方法返回陣列指標和引用 include 返回陣列引用只需將 改為 當為返回陣列引用時 return arr 原型返回陣列指標用法 int fun void 10 int main 型別別名返回陣列指標用法 typedef int ...
陣列 指標 引用
一 指標的概念 指標是記憶體中的位址。1 語法 型別 變數名 這裡的型別是定義了這個指標指向的變數型別。2 指標的運算子 和 1 取位址符 例如 int counta 100 int mm mm counta 假設counta所在位址是2000,這是候m 2000。include void main...
陣列 指標 引用
一 指標的概念 指標是記憶體中的位址。1 語法 型別 變數名 這裡的型別是定義了這個指標指向的變數型別。2 指標的運算子 和 1 取位址符 例如 int counta 100 int mm mm counta 假設counta所在位址是2000,這是候m 2000。include void main...