C語言指針-零碎-2014.10.11

1.int *p = a;
相當於
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指向的一個常量字符串,不允許修改它內部的字符。
3.
  • char a[] = "lmj";定義的是一個字符串變量
  • char *p2 = "lmj";定義的是一個字符串常量

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章