關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。
指標也是一種變數,占有記憶體空間,用來儲存記憶體位址
指標就是告訴編譯器,開闢4個位元組的儲存空間(32位系統),無論是幾級指標都是一樣的
*p操作記憶體
在指標宣告時,*
號表示所宣告的變數為指標
在指標使用時,*
號表示操作指標所指向的記憶體空間中的值
*p
相當於通過位址(p變數的值)找到一塊記憶體;然後操作記憶體
*p
放在等號的左邊賦值(給記憶體賦值)
*p
放在等號的右邊取值(從記憶體獲取值)
指標變數和它指向的記憶體塊是兩個不同的概念
給p賦值p = 0x1111;
只會改變指標變數值,不會改變所指的內容;p = p +1;``p++
給*p
賦值*p='a';
不會改變指標變數的值,只會改變所指的記憶體塊的值
等號左邊*p
表示給記憶體賦值,等號右邊*p
表示取值,含義完全不同
保證所指的記憶體塊能修改,即不要出現野指標和指向系統記憶體區域以及修改常量區資料
指標是一種資料型別,是指它指向的記憶體空間的資料型別
指標步長(p++),根據所致記憶體空間的資料型別來確定
p++ = (unsigned char )p + sizeof(a);
結論:指標的步長,根據所指記憶體空間型別來定
指標變數和它指向的記憶體塊變數
這完全是兩碼事
指標指向某個變數,就是把某個變數位址否給指標
指標實際上記錄的就是位址
*p
間接賦值成立條件
需要滿足三個條件
2個變數(通常乙個實參,乙個形參)
建立關係,實參取位址賦給形參指標
*p
形參去間接修改實參的值
int num =0;
//實參
int*p =
null
;p =
#num =1;
*p =2;
//通過*形參 間接 地改變實參的值
間接賦值的應用場景
在乙個函式之內:
*p1++
=*p2++
;
函式呼叫:
int
getstr
(int
*a)
函式呼叫時,用n指標(形參)改變n-1指標(實參)的值
改變0級指標(e.g.int num = 1
)的值有2種方式
改變1級指標(e.g.char *p = 0x1111
)的值,有2種方式
改變2級指標的(e.g.char **pp = 0x1111
)的值,有2種方式
函式呼叫時,形參傳給實參,用實參取位址,傳給形參,在被呼叫函式裡面用*p
,來改變實參,把運算結果傳出來
間接賦值的推論 ==> 指標做函式引數
指標作為函式引數的精髓
####主調函式 被調函式
主調函式可把堆區、棧區、全域性資料記憶體位址傳給被呼叫函式
被呼叫函式只能返回堆區、全域性資料
記憶體分配方式
指標做函式引數,是有輸入和輸出特性的
序號指標
堆疊主調函式引數
被調函式引數備註1
1級指標(做輸入)堆分配
使用一般禁用棧分配
使用常用
21級指標(做輸出)棧使用
傳出結果常用3
2級指標(做輸入)堆分配
使用一般禁用棧分配
使用常用
42級指標(做輸出)堆使用
分配常用,不建議用,一般轉為2
53級指標(做輸出)堆使用
分配不常用
1級指標做輸入
int
showbuf
(char
*p);
intshowarray
(int
*p;int num)
;
1級指標做輸出
int
getlen
(char
*pfilename,
int*pfilelen)
;
2級指標做輸入
int
main
(int argc,
char
*args)
;//指標陣列
intshoumatrix
(int[3
][4]
,int len)
;//二維陣列字串
2級指標做輸出
int
getdata
(char
**data,
int*datalen)
;int
getdata_free
(void
*data)
;int
getdata_free
(void
**data)
;//避免野指標
3級指標做輸出
int
getfileallline
(char**
*content,
int*pline)
;int
getfileallline_free
(cahr *
**content,
int*pline)
;
深入理解C語言 深入理解指標
關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...
C語言指標深入理解
前幾天看了乙個程式,裡面一段關於指標的 讓我非常糾結,看了很久才看懂,在這裡將將其記錄下來,希望能對大家有一定的幫助,先看示例程式 編譯器gcc include include include typedef struct list node list node,list,plist node st...
深入理解C指標
指標使用分析 提及指標早已不再感覺到陌生,大一初識c語言,老師就一再強調指標的重要性。而然一直以來對其的認識僅停留在 指標 指向其他資料的記憶體位置的變數 現在我們不妨以指標如何用開始,再次 指標。先來看一段 include using namespace std intmain 宣告乙個int型指...