我在windows7上使用dev cpp編譯我的代碼。將int打印爲float時,printf的行爲是什麼?
int d = 0x12;
char* e = (char*)&d;
printf("%d %d\n", sizeof (int), sizeof (float));
printf("%p %p\n", &d, (float*)&d);
printf("%p %p %p %p %p\n", &d, &e[0], &e[1], &e[2], &e[3]);
printf(" %d | %x | %#1x | %#1x | %#1x |%p\n", d, e[0], e[1], e[2], e[3], &e[0]);
getchar();
4 4
0028FF40 0028FF40
0028FF40 0028FF40 0028FF41 0028FF42 0028FF43
18 | 12 | 0 | 0 | 0 |0028FF40
你可以看到,如果我使用%d打印d,它會打印e的4個字節。但是如果我使用下面的%f,它會在必須打印e的第一個字節的地方顯示零。任何人都可以幫助解釋爲何發生這種情況爲什麼e的內容取決於d如何格式化?
int d = 0x12;
char* e = (char*)&d;
printf("%d %d\n", sizeof (int), sizeof (float));
printf("%p %p\n", &d, (float*)&d);
printf("%p %p %p %p %p\n", &d, &e[0], &e[1], &e[2], &e[3]);
printf(" %f | %x | %#1x | %#1x | %#1x |%p\n", d, e[0], e[1], e[2], e[3], &e[0]);
getchar();
的輸出是:
4 4
0028FF40 0028FF40
0028FF40 0028FF40 0028FF41 0028FF42 0028FF43
0.000000 | 0 | 0 | 0 | 0x28ff40 |76869F1D
您應該停止使用Dev-Cpp。它非常過時,並使用古代版本的GCC。 – ThiefMaster
爲什麼你將'(int *)'轉換爲'(float *)'?編程很難,因爲它沒有這樣的東西。 –
[如果printf被錯誤的格式字符串調用會發生什麼?](http:// stackoverflow。com/questions/14504148/what-can-happen-if-printf-is-called-with-a-wrong-format-string) –