2014-10-05 69 views
-1

比方說,我有爲什麼指向char的指針會產生警告?

char *greeting = "Hello"; 
char *names[] = { "Tom", "Jerry" }; 

我可以聲明一個指向字符指針的names,這樣

char **names2 = names; 

,但我不能爲greeting這樣做。

我得到警告:從不兼容的指針類型初始化。

爲什麼? greeting是指向char的指針,就像names是指向char的指針數組,爲什麼我不能聲明指向greeting的指針?

+0

'char ** names3 =&greeting;',數組的名字代表第一個元素的地址。 – BLUEPIXY 2014-10-05 23:10:56

回答

1

你只需要使用1x *!

因爲char *和char **是不同的類型!

所以你試圖用char *類型的變量分配給同類型char **

一個變量,而該給你一個警告

所以這應該工作:

char *greeting = "Hello";    
char *names[] = { "Tom", "Jerry" };  

char *greeting2 = greeting;   //Type char * 
char **names2 = names;    //Type char ** 
+2

'names'的類型不是'char **'。但是,它在表達式中使用時會衰減到該類型......例如,「names2」的初始化程序。 – 2014-10-05 23:17:48

+0

謝謝。正如BLUEPIXY指出的那樣,我可以使用'char ** names2 =&greeting;' – intelli78 2014-10-06 13:10:39

-1

在C中,指針和數組是緊密關聯的。

做這樣的事情:

char* names[] = {"Tom","Jerry"}; 

是一樣的做這樣

char** names = {"Tom", "Jerry"}; 

事物的char*值不能分配給char**價值,因爲他們是不同類型的。


讓我們從數組的角度來看待同樣的事情。
這兩個變量可以聲明如下:

char greeting[8] = "Hello"; 
char names[][5] = { "Tom", "Jerry" }; 

上面的例子應清楚,即greetings是單一尺寸的陣列,而names是雙尺寸數組和兩個因此不相容

+2

這是錯的:'char ** names [] = {「Tom」,「Jerry」};' – wildplasser 2014-10-05 23:09:34

+0

@wildplasser是的,錯字! – gldraphael 2014-10-05 23:11:55

+0

「做類似:char * names [] = {」Tom「,」Jerry「}; 與做類似char ** names = {」Tom「,」Jerry「}; - 不,那沒什麼。後者具有太多的初始化器,並且初始化器具有錯誤的類型。 「一個char *值不能被分配給一個char **值,因爲它們是不同的類型」 - 然而你試圖將「Tom」分配給一個「char **」。 「指針和數組密切相關」 - 這是一個常見的誤解。數組衰減指向表達式中的第一個元素,但它們與指針無關。 – 2014-10-05 23:19:59

相關問題