首先說指針,指針的定義及初始化格式如下:
int a=10;
int *p=&a;
int *q=p;
我們定義一個變量的時候,格式是
<變量類型> <變量名> ;
對於指針來說,變量類型是包括 * 符號的,也就是說上面定義的指針p的變量類型是int * ,指針q的變量類型也是int *
所以對於指針類型變量的定義,以上寫法對於新手來說容易造成困惑,尤其是再加上p=q這樣的賦值語句之後,新手肯定會困惑
因此我們把以上定義寫成如下形式,
int a=10;
(int *) p=&a;
(int *) q=p;
這樣就非常直觀了,指針變量用起來和普通變量沒有什麼區別。
================================================================
C語言有兩種表示字符串的方法,一種是字符數組,另一種是字符串常量,它們在內存中的存儲位置不同,使得字符數組可以讀取和修改,而字符串常量只能讀取不能修改。
char ch[]="hello";
char *ch="hello";
它們最根本的區別是在內存中的存儲區域不一樣,字符數組存儲在全局數據區或棧區,第二種形式的字符串存儲在常量區。全局數據區和棧區的字符串(也包括其他數據)有讀取和寫入的權限,而常量區的字符串(也包括其他數據)只有讀取權限,沒有寫入權限。
我們將第二種形式的字符串稱爲字符串常量,意思很明顯,常量只能讀取不能寫入。請看下面的演示:
- #include <stdio.h>
- int main(){
- char *str = "Hello World!";
- str = "I love C!"; //正確
- str[3] = 'P'; //錯誤
- return 0;
- }
第4行代碼是正確的,可以更改指針變量本身的指向;第3行代碼是錯誤的,不能修改字符串中的字符。