2013-06-26 22 views
0

我下面的代码给我一个警告:如何解决编译器错误“:警告:分配使得整数指针不进行强制转换”

警告:分配使得整数指针,未作类型转换“:

uint16_t b[4]; 
uint16_t *g_00; 
uint16_t *g_01; 
uint16_t *g_10; 
uint16_t *g_11; 


b[0] = g_00; 
b[1] = g_01; 
b[2] = g_10; 
b[3] = g_11; 

printf ("add = %x\n", b[0]); 

我的意思是使用b[0]... b[1]挽救uint16_t *g_00;

我怎样才能解决这个编译器警告地址?

+3

如果你想'B'保存的地址也将需要地址的大小。不知道为什么你不会为b使用'uint16_t *':'uint16_t * b [4]'。 –

+0

如果他想“保存'uint16_t * g_00'的地址”,它应该是'uint16_t ** b [4]';如果他想保存'uint16_t * g_00'的*值*,它应该是'uint16_t * b [4]'。如果你想'b'保存一个指针,它需要是一个与指针相同的*类型的对象数组,而不仅仅是指针的* size *;除了'void *',C指针不是泛型地址,它们是指向特定类型的指针。 – 2013-06-26 17:47:07

回答

2

我打算用b [0] ... b [1]来保存uint16_t * g_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. */ 
+0

由于“uint16_t * g_00'的地址是指向”uint16_t“指针的指针,可能你的意思是'uint16_t ** b [4]'。 – 2013-06-26 17:11:44

+0

* Mathuin *的编辑是错误的。但是我现在无法撤消它! – alk

+0

@guyharris:不是我! – alk

相关问题