2013-06-26 39 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

相關問題