[英]Casting an int pointer to a char ptr and vice versa
問題很簡單。 據我了解,GCC堅持認為字符將是字節對齊的,並且在32位環境中對齊4字節對齊。 我也知道C99標准6.3.2.3,它表示在未對齊的指針類型之間進行轉換會導致未定義的操作。 C的其他標准對此有何評論? 這里也有許多經驗豐富的編碼員 - 對此有任何看法將不勝感激。
int *iptr1, *iptr2;
char *cptr1, *cptr2;
iptr1 = (int *) cptr1;
cptr2 = (char *) iptr2;
C只有一個標准(ISO標准),有兩個版本(1989年和1999年),還有一些非常小的版本。 所有版本和修訂都同意以下內容:
char*
將能夠處理任何數據
void*
與char*
相同,除了與它之間的轉換不需要類型轉換 int*
轉換為char*
總是有效,轉換回int*
char*
轉換為int*
並不能保證正常工作 保證char指針的工作原理是這樣的,例如,你可以從內存中的任何地方將整數復制到內存或磁盤中的其他地方,然后返回,這在低級別中是非常有用的。編程,例如圖形庫。
CPU有big-endian和little-endian,因此結果未定義。 例如,對於轉換后的char指針,0x01234567的值可以是0x12或0x67。
你可以試試:
iptr1 = atoi(cptr1); // val now = pointed by cptr1
cptr2 = atoi(iptr2); // val now = pointed by iptr2
這在DevCpp中對我有用!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.