我一直試圖通過一些C基礎最近嘗試和建立一個基本的低級語言的理解。 在我遇到的文件之一(A tutorial on pointers and arrays in C) 筆者採用的是空指針在printf
聲明:鑄造指針無效時打印
int var = 2;
printf("var has the value %d and is stored at %p\n", var, (void *) &var);
和狀態的原因:
我投的指向整數成void 指針使它們與%p轉換規範兼容。
然而,省略(void *)
不會導致錯誤或警告,無論是編譯和運行,或通過valgrind
運行。
int var = 2;
printf("var has the value %d and is stored at %p\n", var, &var);
這裏被認爲是無效的,被認爲是一種最佳實踐或標準,還是有什麼更險惡的事情發生?
不可能通過實驗檢查你是否寫下了正確的答案C.程序是正確的C如果遵循規則,那就是你所能做的。 –
這只是顯而易見的,劇組字面上說「我正在用這個具體的方式解釋這個值」。在你的例子中,你將'int *'強制轉換爲'void *'。所以把我的整數指針解釋爲一個通用指針。就個人而言,對於這樣的微不足道的情況來說,如此冗長並不是很好的做法。 – SGM1
允許不同類型的指針具有不同的表示和對齊限制。 'printf()'是一個可變參數函數,它不會自動將其參數轉換爲其參數類型,因此使用錯誤類型的參數調用會導致未定義的行爲。 – EOF