深入理解C語言 深入理解指標

2022-10-11 11:57:12 字數 2954 閱讀 1397

關於指標,其是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型指...