C語言指標學習

2022-06-25 18:48:10 字數 1116 閱讀 3559

一、明確幾個符號

1、&取位址符,*取值符

1、char *a

別用cha* a=null,容易引起歧義

例如char* a , b;//其實是定義指標a,和char型變數b。

定義多個指標用:

char *a = null,*b = null;

2、定義指標時初始化

因為指標a到底指向**,我們不知道。隨便改變這個位址的值,可能導致一些有用的資料被「莫名其妙地修改」。

char *buf = null;

char a[100];    

//&a[0] 和 a一樣,都是陣列的第乙個元素的位址

1、這是個巨集觀概念,「指向陣列」並不是指標就是陣列,你可以理解為將指標和陣列聯絡起來。一般我們將指標指向陣列第乙個元素的位址,其實指向陣列的任何乙個變數的位址都是可以的。

char a[100];    

char *p = null

//方法一:

p = a;

//方法二:

p = &a[0];

2、當指標指向陣列元素的時候,可以對指標變數進行「加減」運算,+n表示指向p指標所指向的元素的「下n個元素」,-n表示指向p指標所指向的元素的「上n個元素」。並不是將位址加1。 

3、其實使用指標法來訪問陣列的元素,不一定需要定義乙個指向陣列的單獨的指標變數,因為陣列名自身就是指向陣列「第乙個元素」的指標,因此指標法可以直接作用於陣列名:

1、記憶體裡面每乙個位元組都有乙個位址,位元組是位址編號的最小單位

比如定義int a[3]=;

a[0]的位址=0x7fff569f16cc

a[1]的位址=0x7fff569f16d0

兩者相差4,原因是每個元素都站4個位元組。每個位元組都有位址的最小單位。 

2、不管定義時將指標定義成何種型別,指標本質上都是乙個數字,其位數由編譯器(我的vscode)來決定。

比如我的編譯器是32位,那麼無論是定義乙個char *pc還是定義乙個int *pi,本質上pc與pi都是乙個32位的數,但是由於"char *" 和 "int *"的限制,所以pc+1是自加8bit,而pi+1是自加32bit。

學習C語言指標

先看個程式,是華為2005年招聘筆試題之一 include main int p,q p a q a 2 printf a p q d n q d n p d n q p d n a q p q,p,q p getch 執行結果 a q p 3 q 42 p 46 q p 2 6.3 指標的運算 指...

c語言 指標學習

最近重翻了c語言程式設計這本書,有了一些新的感觸,這本書從資料型別 運算子和表示式 迴圈和選擇結構 輸入輸出 陣列 指標 字串 函式 構造體和檔案操作等方面來深入淺出的介紹c語言。當然最令人印象深刻的是指標。指標是存放著變數的位址的變數的資料型別,換言之,指標變數儲存的是變數的位址值,由於指標可以直...

c語言指標學習筆記

example 1 int a,b,p,q p a p a p q b p p a 錯誤,因為p實際上是乙個位址,而a是乙個整型值 p q 錯誤,因為這句話的意思是 將位址q指向的單元的值賦給位址p。而實際上p是乙個位址,是不能存值得 p a 錯誤 注意,如果這樣定義了 p,那麼 p表示位址 指標 ...