为什么指向char的指针会导致警告?

时间:2014-10-05 23:03:18

标签: c pointers

我们说我有

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

我可以声明指向names的char的指针,就像这个

一样
char **names2 = names;

但我不能为greeting这样做。

我得到警告:从不兼容的指针类型初始化。

为什么呢? greeting是指向char的指针,就像names是指向char的指针数组一样,为什么我不能声明指向greeting的指针}?

2 个答案:

答案 0 :(得分:1)

您只需使用1x *!

因为char *和char **是不同的类型!

因此,您尝试将类型为char *的变量分配给类型为char **

的变量

这会给你一个警告

所以这应该有效:

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

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

答案 1 :(得分:-1)

在C中,指针和数组密切相关。

做类似的事情:

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

与做

之类的事情相同
char** names = {"Tom", "Jerry"};

char*值不能分配给char**值,因为它们属于不同类型。

<小时/> 让我们从数组的角度来看待同样的事情 这两个变量可以声明如下:

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

上面的示例应该明确指出,greetings是单维数组,而names是一个二维数组,因此两者是不兼容的