相當於
int *p = &a[0];
等效於下面兩行代碼:
int *p;
p = &a[0];
2.注意以下幾種定義的區別
char *s; s = "mj";
上面的指向方式也是正確的:先定義指針變量,再指向字符串。如果是字符數組就不允許這樣做,下面的做法是錯誤的:
1 char s[10]; 2 s = "mj";
編譯器肯定報第2行的錯,因爲s是個常量,代表數組的首地址,不能進行賦值運算。
還需要注意的是,下面的做法也是錯誤的:
1 char *s = "mj"; 2 3 *s = "like";
第3行代碼犯了2個錯誤:
- 第3行代碼相當於把字符串"like"存進s指向的那一塊內存空間,由第1行代碼可以看出,s指向的是"mj"的首字符'm',也就是說s指向的一塊char類型的存儲空間,只有1個字節,要"like"存進1個字節的空間內,肯定內存溢出
- 由第1行代碼可以看出,指針s指向的是字符串常量"mj"!因此是不能再通過指針來修改字符串內容的!就算是*s = 'A'這樣"看起來似乎正確"的寫法也是錯誤的,因爲s指向的一個常量字符串,不允許修改它內部的字符。
- char a[] = "lmj";定義的是一個字符串變量!
- char *p2 = "lmj";定義的是一個字符串常量!