《The C Programming Language》學習筆記
阿新 • • 發佈:2018-11-12
第五章:指標和陣列
- 單目運算子的優先順序均為2,且結合方向為自右向左。
*ip++; // 將指標ip的值加1,然後獲取指標ip所指向的資料的值
(*ip)++; // 將指標ip所指向的資料的值加1
當計算
a[i]
時,C編譯器會立即將其轉換為*(a+i)
。也就是說,C語言中陣列下標表達式和指標加偏移是等價的。陣列名和指標的一個區別:指標是變數,可以進行賦值和加減運算;陣列名不是變數,不能進行賦值和加減運算。
p[-1], p[-2]
在語法上是合法的,只要保證元素存在,後向索引陣列也是可以的。指向同一個陣列(包括陣列最後一個元素的下一個元素)的兩個指標可以進行大小比較,而對沒有指向同一個陣列的兩個指標進行大小比較的行為是undefined的。
指標的合法操作:同類指標賦值、指標加減某個整數、指向同一陣列的兩個指標相減或比較大小、將指標賦值為0或與0比較;指標的非法操作:兩個指標相加、相乘、相除,以及指標與浮點數相加減等。
char *pmsg = "now is the time";
是將一個指向字元陣列的指標賦值給pmsg,而不是字串拷貝。C語言不提供任何對整個字串作為一個單元進行處理的操作符。- 注意通過字串指標修改字串內容的行為是undefined的:
char amsg[] = "now is the time"; // an array char *pmsg = "now is the time"; // a pointer