一、明確幾個符號
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表示位址 指標 ...