關於字元指標

2021-06-08 05:09:15 字數 1742 閱讀 7549

如果我們對乙個非字元的指標進行操作,方法是這樣的: 

定義: 

(1)int a=7; int *p=&a; 或者 

(2)int a=7; int *p; p=&a; 或者 

(3)int a=7; int *p; *p=a; 

(1)這樣定義的原因是因為等號兩邊的型別必須匹配,int *p=&a; 等號左邊定義的是乙個指標,指標的內容是位址,所以等號右邊也應該是位址,&a就是取空間a的位址; 

(2)int *p; p=&a; 為什麼不是 *p=&a 而是 p=&a; 因為在定義的時候「*」只是說明p是乙個指標,而p也是乙個變數,不過是儲存位址的一種特殊的變數,對於變數使用,我們都是直接使用它的名字,就好象,我們定義個常量 const a=7; 我們要呼叫它的時候直接使用a就可以了,並不需要帶上 const 修飾,這裡也一樣,用指標變數時並不需要帶上「*」; 

(3)而第三種情況中的 *p=a;中的「*」和第二種裡面是不同的,這裡的「*」是取內容符,與之相反的是取位址符「&」,分析一下,第三種情況中,等號左邊是*p表示對指標p取內容,它的內容指向記憶體中的某個已經在開始通過 int *p; 定義好的空間裡(比較確切一點的說法是,p在定義的時候,其內容裡的位址指向記憶體中某個未知的空白區域,即未占用,不受保護的記憶體空間),這個空間裡存放的資料型別是整型,所以等號的右邊也應該是整型才能匹配,所以是 *p=a; 這裡的「*」和定義時候的是不同的,這一點很重要。 

其實上面的都是些題外話,我要說的其實是關於指標的輸出的一些問題。我們利用上面定義好的進行輸出操作。 

輸出指標的內容(即所指向空間的位址):cout<

輸出指標所指的內容(即指標內容所描述位址空間中的內容):cout<<*p<

指標對於字元的處理卻有些特殊,和前面的非字元的指標輸出處理要分開理解。 

比如,我們定義乙個 char a='a'; char *p=&a;  如果我們呼叫上面非字元指標的輸出方式,結果如下: 

方式1 cout<

方式2 cout<<*p<

而且我們直接操作 cout<<&a<

為什麼方式1輸出的不是位址呢?這裡有乙個特殊的處理,雖然這裡的p的內容確確實實是乙個位址,但是cout操作字元指標的話,它遇到位址,就會直接去尋找這個位址所指向的內容,並把它的空間裡的機器數按照字元的規則轉化成字元輸出,直到遇到「\0」這個操作符才停止。所以我們直接輸出p的時候,它先輸出『a』然後再繼續讀取後面的記憶體空間知道遇到「\0」,顯示結果是「a+亂碼」。 

你肯定會說,為什麼要這樣呢,這樣多不方便呀,其實這麼做是有目的的,而且恰恰就是為了方便才這麼設定的。因為這樣就可以很容易的處理字串了,而處理字串是我們在計算機中用得很多的操作。 

比如我們第乙個字串陣列 char a="mantou"; a在記憶體中在7個位元組,而不是6個,因為在mantou字串後面還隱藏有乙個「\0」,這時我們用 char *p=a; (這裡不用&a是因為,a是乙個陣列,陣列名a本身就是乙個指標常量) 輸出操作 cout<

雖然通常情況下我們是不需要了解我們的資料位址的,但我也順便說說,怎麼得到字元指標的位址,也可以方便大家對記憶體位址的分配再做更深入的研究。 

char a='a';  如果這裡直接輸出 cout<<&a<

做個小技巧,首先我們知道p中的內容本身就是位址,但是因為它是字串,我們又不能直接輸出它,所以呀,我們可以把指標裡的內容(記載的是乙個位址資料)強制轉化成整型再輸出 cout<<(int)p<

cout<

<

<

注意不要忘了 #include這個標頭檔案哦  

**:感覺很有用,在此分享一下。

關於字元陣列和字元指標

include void main 對於字元陣列a,其中的內容是可以改變的。可以再次對某個元素賦值 如 a 2 r 正確 a中存放首字元的位址,但不可被改變。a adeafsa 錯誤 對於字元指標變數p,它指向了乙個字串常量,而常量被儲存在常量區,是不可改變的 如 p r 錯誤 不過可以對指標變數p...

關於指標 與 字元陣列

在我們寫 中使用到指標的字串時,經常會出現執行錯誤,大部分出現的錯誤是試圖去改變指標的字串的內容。指標的字串的內容是儲存在靜態資料區的,是不能夠改變的。需要使用字元陣列。例如改變 char p abcdef p 1 d 這是錯誤的不能改變裡面的內容,但是可以使用裡面的資料 char p abcdef...

關於const限定的字元指標

1 const char p 2 char const p 3 char const p 4 const char p 5 char const p 6 char const p 7 char const p 當然還有在 5 6 7 中再插入乙個const的情況,不過分析了以上7種,其它的就可類推了...