1、指針和數組變量的差別
#include
輸出:
output:
15
8
0x7fff5ab94af5
0x7fff5ab94af5
0x7fff5ab94af5
0x7fff5ab94ae8
- printf("%pn", s); 與 printf("%pn", t); 相同可以看出 數組變量可以被當做指針使用 ,并指向數組在存儲器中的 起始位址 。
- 對于sizeof運算,當參數為數組變量時,會自動計算對應的數組長度而非指針長度(其實就是這個資料類型所占的位元組大小)。
- 對于數組變量取位址仍然為數組的起始位址:&s == s ==&s[0] 值相同但含義不同
- 數組變量不能指向其他地方(數組名是個常量),但建立指針變量的時候計算機會為它配置設定存儲空間。實際上計算機隻會為數組配置設定存儲空間, 但不會為數組變量配置設定任何存儲空間 ,編譯器會在數組變量出現的地方将它替換成數組的起始位址。
2、C語言中指針+1運算
好文:詳解:C語言中的指針和p, p+1, *(p+1), *P+1, p[0], &p[0] 的含義
注意:*p++ //先解引用,然後p的位址自增(與P指向的對象無關)
注意:p=NULL 和p=0 或 p='0' 等價
3、二維數組
二維數組可以形象的看作為用行指針、列指針來操作
行指針前+* = 列指針
列指針前+& = 行指針
p[n] == *(p+n)
p[n][m] == *( *(p+n)+ m )
4、C語言函數不定參數實作方式
好文:C語言函數不定參數實作方式
5、const關鍵字
#include
6、位元組對齊
//位元組對齊 原則;
好文:#pragma pack()用法詳解
7、大小端問題 Little-Endian Big-Endian
//大小端 + 聯合體
好文:C語言之大小端詳解_C/C++_qq_39412582的部落格-CSDN部落格
8、檔案操作
檔案操作
r 可讀權限 檔案必須存在 若不存在打開失敗報錯
r+ 可讀可寫權限 檔案必須存在 若檔案不存在打開失敗報錯
w 可寫權限 不允許檔案讀出 若檔案不存在 建立檔案
w+ 可讀可寫檔案 若檔案不存在 建立檔案
a 以附加方式打開可寫的檔案 若檔案存在 則會在檔案末尾進行資料寫入 若檔案不存在 建立檔案
a+ 以附加方式打開可讀可寫的檔案 若檔案存在 則會在檔案末尾進行資料寫入 若檔案不存在 建立檔案
//檔案操作 注意在同一個檔案中不要同時進行讀寫操作(檔案在讀寫時候檔案流會移動)
好文:C語言檔案讀寫操作總結 - home普通的人 - 部落格園
9、段錯誤快速定位
1、 編譯時gcc 1.c -g ,後邊加上-g
2、 運作時./a.out,産生段錯誤時會自動生成core.xxxx的檔案
(若沒有産生這個檔案,則在指令行輸入ulimit -c umlimited,重新編譯運作)
3、 用gdb調試 gdb a.out core.xxxx
4、 輸入where檢視詳細資訊,既可以定位段錯誤的位置
10、++i、i++
++i 先運算,再顯示值
i++ 先顯示,再運算
11、程式的終止及atexit函數詳解
好文:程式的終止及atexit函數詳解_C/C++_honeyJ-CSDN部落格
12、三目運算
好文:三目運算符詳解 - 鴻燕藏鋒 - 部落格園
對上文中第7點不甚了解,看不出來差別
13、指針
好文:C語言指針詳解 - lulipro - 部落格園
指針是程式資料在記憶體中的位址,而指針變量是用來儲存這些位址的變量。
為什麼需要指針?
第一,指針的使用使得不同區域的代碼可以輕易的共享記憶體資料。
第二,指針使得一些複雜的連結性的資料結構的建構成為可能,比如連結清單,鍊式二叉樹等等。
第三,有些操作必須使用指針。如操作申請的堆記憶體。
第四,C語言中的一切函數調用中,實參傳遞給形參的機理都是“按值傳遞(pass by value)”的,如果我們要在函數中修改被傳遞過來的對象,就必須通過這個對象的指針來完成。
//1) 一個有10個指針的數組,該指針是指向一個整型數的;
14、類型限定符
好文:C語言類型限定符
15、函數指針
#include
16、數組指針array pointer 指針數組 pointer array
int
指針數組(也就是元素為指針類型的數組)常常作為二維數組的一種便捷替代方式。一般情況下,這種數組中的指針會指向動态配置設定的記憶體區域。
//例如,如果需要處理字元串,可以将它們存儲在一個二維數組中,
17、 動态記憶體配置設定
兩個記憶體配置設定函數 malloc()和 calloc()的參數不一樣:
void*malloc(size_t size);
函數 malloc()配置設定連續的記憶體區域,其大小不小于 size。當程式通過 malloc()獲得記憶體區域時,記憶體中的内容尚未決定。
void*calloc(size_t count,size_t size);
函數 calloc()配置設定一塊記憶體區域,其大小至少是 count_size。換句話說,上述語句配置設定的空間應足夠容納一個具有 count 個元素的數組,每個元素占用 size 個位元組。而且,calloc()會把記憶體中每個位元組都初始化為 0。
18、應用
好文:C語言中引用的用法_C/C++_小米mm修仙路-CSDN部落格
指針和引用的差別
相同點:
1)都是位址的概念,指針指向一塊記憶體,它的内容是所指記憶體的位址;引用是某塊記憶體的别名。
差別:
1)指針是一個實體,而引用僅是個别名;
2)引用使用時無需解引用(*),指針需要解引用;
3)引用隻能在定義時被初始化一次,之後不可變;指針可變;
5)引用不能為空,指針可以為空;
6)“sizeof 引用”得到的是所指向的變量(對象)的大小,而“sizeof 指針”得到的是指針本身(所指向的變量或對象的位址)的大小;
7)指針和引用的自增(++)運算意義不一樣;
8)從記憶體配置設定上看:程式為指針變量配置設定記憶體區域,而引用不需要配置設定記憶體區域。
19、 C語言編譯
四個步驟
一、預處理階段
展開頭檔案,宏替換,條件編譯,去掉注釋
二、編譯階段
檢查文法錯誤,生成彙編代碼
三、彙編階段
把彙編代碼轉換成二進制機器碼
四、連結階段
将所有機器碼連結在一起,生成可執行程式
20、 判斷float類型資料與某個值是否相等
float類型資料的比較我們不能使用"=="、"!="等确定性的判别,必選要轉換為">="、"<="等判别式
例如:判别float a是否為0
#include
21、連結清單
好文:【連結清單】連結清單常見筆試題和面試題(C語言)_C/C++_HongKnight的部落格-CSDN部落格
好文:數組和連結清單的差別淺析_網絡_我的部落格-CSDN部落格
好文:判斷一個連結清單是不是循環連結清單 - xshang - 部落格園
22、為什麼在定義結構體時成員變量不能賦初值?
TODO
22、聲明和定義的差別?
TODO
23、回調函數深入了解
好文:回調函數(callback)是什麼?