我有名
“赋值从指针进行整数转换而无需强制转换”
问题。我知道这意味着什么,但我找不到解决方法。
以下说明导致了问题
champ->instruction.instruction[i + 1] =
(champ->pc + (champ->instruction.instruction[i + 1] % IDX_MOD));
champ->instruction.instruction
是int *
。champ->pc
是一个unsigned char *
,用于计数数组的地址。IDX_MOD
是类似于#define IDX_MOD 36
的定义。我可以通过声明如下变量来解决该问题:
unsigned char *tmp;
但是我不能将此变量放在我的
champ->instruction.instruction
中。任何人都可以有一个主意吗?
最佳答案
根据您的代码,champ->instruction.instruction
是int *
champ->instruction.instruction[i + 1]
是int
和champ->pc
是unsigned 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/