一部の (すべてではない) 64 ビット Linux で、int 値 16が切り捨てられてゼロになるという奇妙な問題に直面しています。
切り捨ては、int を void* にキャストし、再び int にキャストするためです (これは良い習慣ではないことを理解してください)。
- 16 は 16 進数の 10 になり、 http: //qb64.net/wiki/index.php?title =%26B
void* は 64 ビット OS で 8 バイトですが、LSB しか推定できませんか?? これが原因ですか??もしそうなら、なぜこれはいつも簡単に再現できないのですか??
またはこれはビッグエンディアンによるものですか??
以下のサンプルソースコード
サンプルソース
int main() {
int i = 0;
void *ptr = NULL;
printf("\nsizeof - void(*) : %d , int : %d", sizeof(void*), sizeof(int));
for(i = 0; i < 20; i++) {
ptr = &i;
printf("\n%d", *((int*)ptr));
}
return 0;
}