記憶體中大致分為四個部分,簡稱記憶體四區。其中含有:棧區、堆區、全域性區/靜態區和**段。
分割槽儲存型別
堆區區域性變數、函式的形參、函式的返回位址
棧區程式設計師通過動態申請記憶體而分配的(malloc, relloc, calloc, new)這些都必須在呼叫過後手動釋放(new, free)
全域性區/靜態區
全域性變數/靜態變數
**段二進位制機器指令
int
main()
上述小**中a和b兩個變數確切的儲存位置為記憶體中的棧。
&: 取位址運算子, 求出乙個變數的儲存位址。例如:&a, &b;
printf
("a的記憶體位址=%d, b的記憶體位址=%d\n"
,&a,
&b);
對於位址的列印輸出,一般情況我們習慣於使用%p來進行16進製制輸出
%d:是按照十進位制方式列印
%p:是按照十六進製制方式列印
%x:是按照十六進製制方式列印
常量:在程式的執行過程當中,值不可以發生改變的量
變數:在程式的執行過程當中,值可以發生改變的量
指標和位址的關係是什麼?
指標就是位址,位址就是指標。
指標常量
&a, &b
指標變數
問題:指標變數和普通變數有什麼區別?
都沒區別,都是用來儲存資料的
要是硬要說他有區別,那麼:
普通變數:儲存數值
char, short , int , long , float, double c語言中6大基本資料型別
是靠變數名還是靠型別?
都可以 ,或者也可以什麼都不靠,也可以什麼都靠,因為c語言語法靈活。
char \*p1;
char
* p1;
char
* p1;
char\*p1;
p1的型別:char*型 , p1讀作指向char型指標, 指標型別
short
*pshort;
int* pint;
long
* plong;
float
*pf;
double
*pdouble;
變數名到底是什麼?pshort,*不屬於變數名的一部分,字母,數字,下劃線, 型別是什麼: short*型
int
* p1, p2, p3, p4, p5, p6;
這裡只定義了乙個指標型別的變數 (int*) :p1, 其餘的都是整型int型變數。
int
*p1,
*p2,
*p3,
*p4,
*p5,
*p6;
這裡才表示全部定義的都是指標型別的變數。
#define定義乙個符號常量, 僅僅只是進行巨集替換
巨集替換: 編譯的預處理階段, int替換為int
typedef起別名,能夠重新定義新的資料型別,不是替換,而是定義新型別
#define int int
#define pint int*
typedef
int myint;
typedef
int* pmyint;
//這裡千萬不要忘記了typedef後面有乙個分號
int c =
30, d =40;
printf
("c=%d, d=%d\n"
, c, d)
;pint p1, p2, p3, p4, p5, p6;
myint c =
30, d =40;
printf
("c=%d, d=%d\n"
, c, d)
;
pint替換為int*,所以只定義了乙個指標型別的變數p1
pmyint p1, p2, p3, p4, p5, p6;
此時這裡一共定義了6個指標型別的變數, 都是pmyint型別, 本質都是int*。
沒有初始化的指標變數是不能使用的,不知道指向**。儲存化就是讓他儲存乙個位址。
int
* p;
printf
("p=%d\n"
, p)
;//此**會直接報錯
int*p =
&a;//p指向a
int*p =
null
;
null表示空指標, 理解為:記憶體位址為0的地方, 不指向任何地方。
間接訪問(解引用):指標指向誰,間接訪問(解引用)得到誰 , 指向誰就等價於誰
間接訪問運算子/解引用運算子 (*)
printf
("*pa=%d, *pb=%d, *pc=%d\n"
,*pa,
*pb,
*pc)
;
注:不能夠貴空指標進行解引用(間接訪問),所以在執行間接訪問(解引用)的時候,一定判斷指標是否為null,【否則可能會導致系統崩潰】
二級指標: 指向一級指標的指標, 二級指標是儲存一級指標的位址
《c和指標》筆記1
本書的開頭便給出了2頁的源 並根據源 對程式進行了解釋 提示以及警告 需要注意以及容易出錯的地方 對於需要在不同原始檔中使用一些宣告,可以在乙個單獨的檔案中編寫這些宣告,然後用 include把這個檔案複製到需要這些生命的原始檔中,這樣可以使用這些宣告的乙份拷貝,用不著在許多不同的地方進行的複製,避...
C語言指標筆記總結1
二.指標和陣列的關係 三.指標和函式的關係1 指標變數佔的位元組數 四.多級指標 五.指標和函式的關係2 指標 位址 記憶體單元的編號。指標就是位址,就是乙個記憶體單元的編號。指標變數是存放位址的變數。指標和指標變數不同,指標就是乙個值,但是通常會把指標變數叫做指標。基本型別指標 int float...
C語言 《C和指標》學習筆記1
由於自己c語言基礎不是很紮實,最近在學習 c與指標 所以最近可能會定期記錄一下自己的學習心得和筆記。編譯過程的幾個階段 1 預處理器階段 2 編譯階段 3 彙編階段 4 鏈結階段 詞法規則 三字母詞 指的是幾個字元的序列,合起來表示另乙個字元 三字母詞 含義?i?轉義序列,字元轉義 識別符號 資料 ...