4
A
回答
3
它們是空操作,只是它們可能會產生編譯時錯誤。因此,它們可以在宏觀中用作斷言。 *&l
確保l
是一個左值,並且&*p
確保p
是(隱式轉換爲)指針。
#define ASSERT_LVALUE(l) (void)(*&(l))
#define ASSERT_POINTER(p) (void)(&*(p))
int main(void) {
int* p;
int i;
ASSERT_LVALUE(i);
ASSERT_LVALUE(3); /* error: lvalue required as unary ‘&’ operand */
ASSERT_POINTER(p);
ASSERT_POINTER(i); /* error: invalid type argument of unary ‘*’ (have ‘int’) */
ASSERT_POINTER(3); /* error: invalid type argument of unary ‘*’ (have ‘int’) */
return 0;
}
+1
'&* p'適用於陣列。所以它實際上測試'p'是否可以隱式轉換爲指針 –
相關問題
- 1. P /調用指針指針?
- 2. 當p是函數指針時,我們應該使用p(..)還是(* p)(..)?
- 3. c#和C++之間的指針 - p/invoke
- 4. const char ** p指針和整數之間的比較if(** p == NULL)
- 5. C/C++中的指針/數組語法(char ** p,* p [n])
- 6. recurDescents(p)和recurAncestors(p)
- 7. const和普通指針的指針可以混合使用嗎?
- 8. int * p =&a ++和int * p =&++ a
- 9. Memcpy func帶指針變量? char * p; char * q;的memcpy(P,Q,10);它會起作用嗎?
- 10. 誰在他們的博客中使用BlogEngine.Net?它運行良好嗎?它會縮放嗎? :P
- 11. P與P-Complete相同嗎?
- 12. 混合32位和64位P /調用
- 13. '%p'和'my%p'之間的區別?
- 14. 「\ P {Letter}」和NSRegularExpression
- 15. Char * p和scanf
- 16. tlv和protobuf
- 17. 使用Fisher法matlab結合P值?
- 18. 結合primefaces p:鍵盤和p:密碼組件
- 19. 從p和q是質數時找出n = p * q的'p'和'q'
- 20. 正則表達式\ p {L}和\ p {N}
- 21. 「div> p」和「div p」是否一樣?
- 22. 關於「int const * p」和「const int * p」
- 23. 2 [p]和6 [p]是什麼意思?
- 24. 使用ref insted的固定指針進行P/Invoke
- 25. x = * p ++和* p ++; x = * p in c有什麼區別?
- 26. 使用Python計算P ** N而Ñ方法+ OO和P是矩陣
- 27. Java和OAuth入門 - 我們是否應該使用code.google.com/p/oauth?
- 28. P和H1不起作用
- 29. 用CSS連接「div」和「p」
- 30. 指針,我正確使用它們嗎? Objective-C的/可可
它曾經幫助過你嗎?我從來沒有用過它。 –