C 指標筆記 1

2021-10-08 16:24:51 字數 3141 閱讀 3389

記憶體中大致分為四個部分,簡稱記憶體四區。其中含有:棧區、堆區、全域性區/靜態區和**段。

分割槽儲存型別

堆區區域性變數、函式的形參、函式的返回位址

棧區程式設計師通過動態申請記憶體而分配的(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?轉義序列,字元轉義 識別符號 資料 ...