關於指標陣列的初始化的乙個問題

時間 2021-06-03 11:26:28

1樓:

樓主可能基礎知識沒看明白,int*p[3],它首先是乙個陣列,有3個元素,每個元素是乙個指向int型的指標。所以你初始化的時候應該放指標在裡面。你可以和int (*p)[3]比較,它首先是乙個指標,指向乙個能存放3個int元素的陣列。

你可以理解為是乙個二維陣列。

同理const char * p[3],它首先是乙個陣列,這個陣列能存放3個元素,每個元素都是指向char的指標。實際上就是字串。而c,字串常量本身就是指標。

所以"a","b","c"你能初始化成功。

本人也是菜鳥,正在讀c primer plus十六章,字串這個坑我也踩過,所以記得比較深。這些知識在本書都有詳細解釋,雖然很多大牛嫌這本書囉嗦,但是我讀過來表示,凡事作者羅里吧嗦重複寫的內容,一定是很多新手容易踩坑的地方。我十分推薦題主靜下心來讀一遍,等你也覺得作者囉嗦了,你就差不多把c的基礎知識打紮實了。

2樓:diqiu

1.const char * p[3]=能初始化成功,但const int *p[3]=卻不能初始化?

第1個p:

p是1個陣列,有3個元素,每乙個元素的型別是const char*, 所以後面的初始化可以成功。

同理第2個是無法初始化的,因為1,2,3的型別不是(或者無法自動轉化成為)const int*。

2.const char*p[3]=;printf("%s",p[i])為什麼列印出的是字元的值,p[i]中難道不是存的位址嗎 ?

這個其實要看printf的實現。約定是如此。

3樓:

1.const char * p[3]=能初始化成功,但const int *p[3]=卻不能初始化?

因為:"a","b","c"這些字面值的型別本身就是const char*,而1,2,3這些字面值的型別是int,int是不能賦值給const int *的,除非你強轉。

2.const char*p[3]=;printf("%s",p[i])為什麼列印出的是字元的值,p[i]中難道不是存的位址嗎 ?

因為:p[i]的型別是const char*,你用「%s"輸出時,是輸出這個字串的內容。如果你想輸出p[i]中儲存的位址,用這條語句:printf("%p",p[i])

重點是,你要理解什麼是指標陣列,什麼是陣列指標。

4樓:

第乙個問題,你寫的

const

char*p

[3]=

不是字元陣列,是個字元指標陣列,陣列p中存放著的是字元指標,其中第乙個指標指向乙個c風格的字串"a"也可以看成指向乙個字元陣列,陣列中的內容是

使用字串字面量可以初始化字元指標陣列,字串字面量就是乙個指向字串的指標,他的值和上面那個陣列中的『a'的位址是相同的。

第二個問題,使用%s輸出的時候,看到乙個字元指標,就會自動將從這個指標指向的位址直到遇到'\0'之間的字元輸出出來,所以只提供第乙個字元的指標就夠了。你上面的字串陣列'a'之後就是』\0'了,自然輸出』a'就結束了。其他字串同理。

5樓:

C裡字串其實是字元陣列。"ahaha"編譯之後字串本身存在.data segment,原處只留下"ahaha"的開頭在.

data裡的位址。所以字串都是char *,因為這是字串開始的位址。printf的%s要的就是這個開始位址,然後再一路向後輸出直到遇到乙個'\0'為止,這個'\0'編譯器會自動給你加在"ahaha"的末尾。

1裡面你想要的是整數陣列吧,那麼型別就應該寫成const int[3]。

6樓:二級水泥工

基礎C知識吧,我建議你了解清楚一下基本的資料結構及長度。

第乙個問題,指標不能直接用int型去初始化,長度一般不同。

第二個問題,printf要的就是指標來輸出具體內容,可以去好好看看printf函式。

7樓:任衛

1 const int*p【】= {(int*)1,。。。}試試。意義何在

2 %s要的就是字串位址來輸出字串,你恰好傳進來位址,正好。若有輸出位址用%p或%d

8樓:

1. 你用三個C風格字串初始化三個const char* 這是允許的,char*被視作字串。然而,const int*不能這樣初始化。

2. 同上,char*被看做字串,p[i]表示字串的起始位址,會一直向後找到\0作為完整的字串列印。如果你想列印位址,改為printf("%p", &p[i])。

c 類的建構函式初始化問題??

Right If you don t specify any constructors,the compiler will write one for you that doesn t take any arguments.This compiler generated default constr...

C 函式返回常引用給常引用初始化的問題,大家可不可以幫幫我?

黃亮anthony std string get std string t return t 就能滿足這裡的要求。謹慎所有返回引用函式 記憶體塊生命週期 不說人話 字串字面值隱式構造了string物件,get的引數引用了該string物件。但是該物件產生於get函式執行週期內,且由該週期內的棧持有,...

為什麼常量指標必須用乙個非常量的位址初始化

黃達 inta 1 int constb a 這個b是乙個 指標常量 它指向的位址被理解為int型別。它可用int型別的變數 非常量 的位址來初始化。const inta 1 const int b a 這個b是乙個 常量指標 指向的位址被理解為const int型別的位址。它可用乙個const i...