我試圖在內存中使用void * &來存儲一些int,然後檢索它們,但它一直拋出「在算術中使用類型'void *'的指針」警告。C++ void *內存遍歷
void *a = new char[4];
memset(a, 0 , 4);
unsigned short d = 7;
memcpy(a, (void *)&d, 2);
d=8;
memcpy(a+2, (void *)&d, 2); //pointer of type ‘void *’ used in arithmetic
/*Retrieving*/
unsigned int *data = new unsigned int();
memcpy(data, a, 2);
cout << (unsigned int)(*data);
memcpy(data, a+2, 2); //pointer of type ‘void *’ used in arithmetic
cout << (unsigned int)(*data);
結果符合預期,但我擔心這些警告可能會在某些編譯器中變成錯誤。有沒有另一種方法可以做到這一點,我不知道?
我知道這在正常情況下可能是不好的做法,但問題陳述要求無符號整數以2字節數據包的形式存儲和發送。如果我錯了,請糾正我,但根據我的理解,使用char *而不是void *會佔用3個字節的3位數字。
你爲什麼要'void *'?你可以使用'char *' –
new運算符動態分配內存,所以不需要memset。對於通用數據類型,C++也有模板。 –
我需要二進制數據,以便無符號整數存儲在2個字節中。我猜char *需要3個字節的3位數字? – mindreader