我有名


  “赋值从指针进行整数转换而无需强制转换”


问题。我知道这意味着什么,但我找不到解决方法。
以下说明导致了问题

champ->instruction.instruction[i + 1] =
        (champ->pc + (champ->instruction.instruction[i + 1] % IDX_MOD));


champ->instruction.instructionint *

champ->pc是一个unsigned char *,用于计数数组的地址。

IDX_MOD是类似于#define IDX_MOD 36的定义。

我可以通过声明如下变量来解决该问题:unsigned char *tmp;

但是我不能将此变量放在我的champ->instruction.instruction中。

任何人都可以有一个主意吗?

最佳答案

根据您的代码,


champ->instruction.instructionint *
champ->instruction.instruction[i + 1]int





champ->pcunsigned char *
champ->instruction.instruction[i + 1] % IDX_MOD产生int
(champ->pc + (champ->instruction.instruction[i + 1] % IDX_MOD))产生unsigned char *


注意:[pointer + integer产生pointer,而不是integer]

因此,基本上,您正在尝试将unsigned char *分配给int。因此,错误。

要保存(分配)unsigned char *的值,您需要具有一个unsigned char *类型的左值。也许您想将champ->instruction.instruction的类型更改为unsigned char **



编辑:

正如@Eregrith先生在评论中提到的那样,将champ->instruction.instruction更改为unsigned char **将需要使用atoi()strtol()。您需要注意这一点。

否则,在将结果分配给LHS之前,您可能想取消引用RHS指针。在这种情况下,您的表情将看起来像

champ->instruction.instruction[i + 1] =
     * (champ->pc + (champ->instruction.instruction[i + 1] % IDX_MOD));
     ^
     |
//dereference before assigning, will result in a char value, promoted to int.

关于c - 赋值使指针产生整数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29488851/

10-11 07:44