1樓:匿名使用者
(3)中的寫法有誤。
先說單獨定義一個字元指標是這樣的:
char *p;
const是型別限定符(type-qualifier),constant的縮寫,用於型別宣告限定。
就像在中說的:
「簡單的記,const的屬性賦予點是在其最近的識別符號或型別上,僅僅作用在一個點上面。這句話細想不是很嚴謹,但是一般這樣用沒錯。」
上面一句話也就是說,const離char近,作用點就在char上;離p近就作用在p上。
const char *p; p是一個指向常字元的指標(const離char近)。
char const *p; 這個和上一個意義一樣(const離char近)。
char *const p = "helloworld!"; p是一個指向字元的常指標(const離p近),必須在定義時候同時初始化,因為p常指標,一旦定義以後就不能改變指向了。
還有一種常見的用法是:
const char *const p = "helloworld!";這個是指向常字元的常指標(char和p都有const限定),也是必須在宣告時候同時初始化,理由同上。
注意:char *p const;這個定義是不對的。
這些其實沒什麼可以理解的,就像2+3=5一樣直接記住就可以了,以後隨著學的深入再加深理解。
至於你說的其它寫法,還有的,但是意義只是上面幾種。
像這樣的寫法:
const const const const char const const *const const const p = "helloworld!";
這樣的寫法也對,但是意義和const char *const p = "helloworld!";
2樓:魔法師00可可
char * const p; //常量指標,p的值不可以修改char const * p;//指向常量的指標,指向的常量值不可以改
const char *p; //和char const *pconst* char p; //和char * const p這裡刻意打亂了樓主題中的順序,不知道樓主看了是否頭暈其實,識別這個並不困難,就拿const* char p來說const修飾的是什麼呢,是個 * 號對吧》* 號指什麼呢》指標》所以答案就很明確了,這個指標裡存放的地址是不可改變的(const修飾)。但是指標所指向的字元單元卻沒有被const修飾,所以是可變的。
再舉個例子,char const *p,這裡const修飾*p》*p是個值》所以*p這
個值是不能改變的,但是p卻沒有被const修飾,p是可變的
3樓:
你的(3)有誤吧,我沒有見過,這個不太清楚。
(1)指標p所指向的內容不可變。
(2)指標p不可變,但是其指向的內容可變。
(4)等同於(1)
4樓:匿名使用者
(1)是指標的指向的地址值可以改變,但是所指向的地址的內容是不可以改變的,(2)(3)都是一樣的,只是寫法不同,剛好和(1)的相反,指標所指向的地址值不能改變,但是所指向的地址的內容是允許改變的,(4)和(1)一樣,只是寫法不一樣!
5樓:
樓上有兩位大哥不要誤導別人,(3)const* char p;【錯誤的寫法】
辛苦打了大半天,希望你能理解,確實挺繞人的,不過理解後就豁然開朗了
1、const char *p; 【指向const物件的指標】
【幫助理解】:p是指向常量的指標,指向的常量值不可以改。
指標指向const物件,不允許用指標來改變其所指的const值。
此例中,const限定了p指標所指向的物件型別,而並非p本身,也就是說,p本身不是const。
允許給p重新賦值,使其指向另一個const物件,但不能通過p修改其所指物件的值。
const char *p;
const char c = '0';
*p ='0'; //錯誤
p = &c; //正確
還一種情況,當const物件的指標 指向非const物件時:
const char *p;
char c = '0';
p = &c; //正確
是允許的,但同樣不允許通過指標p來修改c的值。
2、char *const p; 【const指標】
【幫助理解】:p是常量指標,p的值不可以修改。
與其他const變數一樣,const指標本身的值不能修改。
此例中,const限定了p指標本身,也就是說,不允許給p重新賦值。必須在定義時初始化。但使用p指標修改它所指向物件的值。
char cc = '0';
char *const p=&cc;
char c = '0';
*p ='0'; //正確
p = &c; //錯誤
貌似和上面第一例相反,呵呵,這樣有助於理解、記憶。其實區別這兩種很簡單,就是確定const限定p指標所指向的物件,還是限定的是p指標本身。
4、char const *p; 【指向const物件的指標】
【幫助理解】:const限定符既可以放在型別前面,也可以放在型別後面。
char const c;
const char c;
等價的。同理
(1)const char *p;
(4)char const *p;
等價的。
5、還有一種 const char *const p ;【指向const物件的const指標】
const char c = '0';
const char *const p = &c;
本例中,既不能修改p所指向物件的值,也不能修改該指標的指向(即p中存放的地址值)。
【幫助理解】:從右至左,p首先是一個const指標(不能修改p本身,即p的地址),指向char型別的const物件(不能修改p所指向的值,即char型別的const物件)。
6樓:匿名使用者
char * p p 為指標變數名, p中儲存的內容(地址1) 指向另一個地址2,裡面存放一個字元
const char *p const修飾的是char表示字元不可改變 即地址2內容不可改;
char const*p const修飾的是p表示p指向的地址不可改變 即地址1內容不可改,但地址2中的內容可以改,既相應的字元可以改
char const*p== char *constpconst* char p沒見過
還有一個
const char const* p 就是都不可改變
7樓:
對指標來說,可以指定指標本身為const,也可以指定指標所指的資料為const,或二者同時指定為const,還有,兩者都不指定為const。
(1)是指定指標所指的資料為const,指標所指向資料是不可修改的,這個指標變數p本身不是const的,它可以再指向其他資料,可以重新給他賦值。
(2)是指標變數本身是const的,初始它指向一個字元型的資料,以後它就一直指向這個字元資料,不可以再改變了,即不能重新給他賦值讓它再指向別的值了。
(3)沒見過這種用法
(4)c++裡面沒有const*的運算子,c++標準規定,const關鍵字放在型別或變數名之前等價的,所以這個跟(1)是一樣的。
(5)還可以是const char * const p,即指標和它指向的部分都是const型的。
(6)當讓也可以都不是const型的,char *p,這個就普通的指標了。
我是這麼記的,看const的位置,以*作分界線,比如(1),const的位置在*前面和char結合(同樣(4)也是這種情況),表示指向的資料是常型的,而(2),const在*後面,與p結合,表示指標變數本身是const型的,其他的類似。
c語言指標問題,C語言指標問題
記憶體對齊的緣故。p buf 作為一個指標,它的值是記憶體的某個位元組的地址。如果想要把 p buf 強制轉換版 成一個 unsigned int 型別的指權針,需要滿足一個必要條件,就是 p buf 的值必須能夠被4整除。之所以是4,是因為 unsigned int 是要佔4個位元組的 c語言結構...
C語言指標變數比較,怎樣運用c語言指標變數比較兩個字串是否相等?請修改
首先要 分清,是在 宣告中 還是在語句中。宣告中,例如 int a 1,b 2 int p,q 宣告 p 和 q 是指標,用於指向 int 型資料。p a q b 語句,p 和 q 是指標 指向的資料 的地址,p 指向 a,q 指向 b.if p q printf 語句,p 和 q 是 地址 地址大...
c 指標陣列問題,C 中關於指標陣列的問題。
是錯誤的。char cchar count 宣告瞭cchar是有count個元素的陣列,每個元素都是指向char型變數的指標。但cin cchar i 卻試圖給cchar的第二個元素 指標 賦一個鍵盤值 這裡指標還沒有確定指向,是隨機的,它隨機地指向了不能寫入的地方,就要出錯。這裡應該先給指標陣列賦...