C 如何修复编译器错误';:警告:赋值从指针生成整数,不带强制转换';
下面的代码给了我一个警告: 警告:赋值从指针生成整数而不进行强制转换: 我想用C 如何修复编译器错误';:警告:赋值从指针生成整数,不带强制转换';,c,C,下面的代码给了我一个警告: 警告:赋值从指针生成整数而不进行强制转换: 我想用b[0]…b[1]保存uint16\u t*g\u 00; 如何修复此编译器警告 我打算使用b[0]…b[1]保存uint16\u t*g\u 00的地址 要在b的条目中存储地址,需要将其声明为指针数组: uint16_t ** b[4]; uint16_t * g_00; ... b[0] = &g_00; /* Stores g_00's address. */ 更新: OP的声明: b[0] =
b[0]…b[1]
保存uint16\u t*g\u 00;
如何修复此编译器警告
我打算使用b[0]…b[1]保存uint16\u t*g\u 00的地址
要在b
的条目中存储地址,需要将其声明为指针数组:
uint16_t ** b[4];
uint16_t * g_00;
...
b[0] = &g_00; /* Stores g_00's address. */
更新: OP的声明:
b[0] = g_00;
不存储g_00
的地址,而是存储g_00
本身携带的值
如果这是目的(与存储g_00
”地址相比),则b
的正确声明为:
uint16_t * b[4];
uint16_t * g_00;
...
b[0] = g_00; /* Stores g_00's value. */
如果你想
b
保存一个地址,它需要一个地址的大小。不确定你为什么不将uint16\u t*
也用于b:uint16\u t*b[4]
。如果他想“保存uint16\u t*g\u 00的地址
”,它应该是uint16\u*b[4]
;如果他想保存uint16\u t*g\u 00的值
,它应该是uint16\u t*b[4]
。如果希望b
保存指针,它需要是一个与指针类型相同的对象数组,而不仅仅是与指针大小相同的对象数组;除了void*
s,C指针不是通用地址,它们是指向特定类型的指针“是指向auint16\u t
的指针,可能您的意思是uint16\u t**b[4]
。Mathuin的编辑完全错误。然而,我现在和这里都无法撤销它@盖伊·哈里斯:不是我!嗯,我不知道为什么你不能编辑你自己的答案,但看起来我可以,所以我只是编辑了它以使其正确。(对于任何想删除其中一个*
的人,在屈服于诱惑之前,对自己说“在C中,数组不是指针”。@guyharris:Thx!我想回滚,而不仅仅是编辑编辑。。。在我的微型手机的微型显示屏上消失了(s-)
uint16_t * b[4];
uint16_t * g_00;
...
b[0] = g_00; /* Stores g_00's value. */