警告-从不兼容的指针类型分配

时间:2019-12-30 11:30:50

标签: c pointers types

首先,对不起,如果您正在努力了解我。我的英语不太好。 我正在学习计算机工程,这是我的第一年。我正在学习C编程。 我想为纸牌游戏编写代码,但无法解决指针问题。


    const char cards[][30] = {"spades_one", ...};
    char is_it_used[][1] = {"1",...};
    char player_1_deck[7][30], player_2_deck[7][30], player_1[1][20], player_2[1][20];
    char *s1, *s2, *s3, *s4;

s1 = &cards[0];
s2 = &is_it_used[0];
s3 = &player_1_deck[0];
s4 = &player_2_deck[0];

由于s1,s2,s3和s4,我收到“来自不兼容指针类型的分配”警告。我该怎么办?我该如何解决这个问题?请帮助我...

2 个答案:

答案 0 :(得分:1)

您遇到的问题是,因为您定义的四个数组是二维

这就是为什么您有错误。

const char cards[][30] = {"spades_one", ...}
char is_it_used[][1] = {"1",...}
char player_1_deck[7][30], player_2_deck[7][30], player_1[1][20], player_2[1][20];
char *s1, *s2, *s3, *s4;

s1 = &cards[0][0]; 
s2 = &is_it_used[0][0];
s3 = &player_1_deck[0][0];
s4 = &player_2_deck[0][0];

以上应该可以

但这确实取决于您要使用s1s2等实现的目标。

拥有

s1=player_1_deck[0];

例如或

s1=player_1_deck[2];

使s1指向一张单独的卡

答案 1 :(得分:0)

在这些赋值语句中

s1 = &cards[0];
s2 = &is_it_used[0];
s3 = &player_1_deck[0];
s4 = &player_2_deck[0];

左操作数的类型为char *,而右操作数的类型分别为char ( * )[30]char ( * )[1]char ( * )[30]char ( * )[30],并且没有隐式转换类型char *到列出的指针之一的类型。

如果您希望指针s1,s4指向多维数组的第一个字符串的第一个字符,则只需编写

s1 = cards[0];
s2 = is_it_used[0];
s3 = player_1_deck[0];
s4 = player_2_deck[0];

请注意该数组

char is_it_used[][1] = {"1",...};

不包含字符串。实际上,此声明等同于

char is_it_used[][1] = { '1',...};
                         ^^^