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. int * p和int ** p之間的指針語法差異指針C++
- 2. P /調用指針指針?
- 3. 當p是函數指針時,我們應該使用p(..)還是(* p)(..)?
- 4. c#和C++之間的指針 - p/invoke
- 5. 指針:在C編程語言中的* p和&p
- 6. const char ** p指針和整數之間的比較if(** p == NULL)
- 7. Deferencing指針與增量(* P ++ = x)的變化* P的至p
- 8. C/C++中的指針/數組語法(char ** p,* p [n])
- 9. recurDescents(p)和recurAncestors(p)
- 10. 在結構和指針上使用P/Invoke
- 11. const和普通指針的指針可以混合使用嗎?
- 12. int * p =&a ++和int * p =&++ a
- 13. Memcpy func帶指針變量? char * p; char * q;的memcpy(P,Q,10);它會起作用嗎?
- 14. 給出「N」發現p和q使得p + q = N和p * q是最大的
- 15. 誰在他們的博客中使用BlogEngine.Net?它運行良好嗎?它會縮放嗎? :P
- 16. 使用指針和聯合
- 17. while(* p){p ++;},while(* ++ p){;}和while(* p ++){;}之間有什麼區別?
- 18. P與P-Complete相同嗎?
- 19. 混合32位和64位P /調用
- 20. '%p'和'my%p'之間的區別?
- 21. 結構,指針和改變它們
- 22. Char * p和scanf
- 23. 「\ P {Letter}」和NSRegularExpression
- 24. tlv和protobuf
- 25. 使用Fisher法matlab結合P值?
- 26. 結合primefaces p:鍵盤和p:密碼組件
- 27. 爲什麼unique_ptr過載重置(指針p = pointer())和reset(nullptr_t)?
- 28. 從p和q是質數時找出n = p * q的'p'和'q'
- 29. sed中p和p有什麼區別?
- 30. 正則表達式\ p {L}和\ p {N}
它曾經幫助過你嗎?我從來沒有用過它。 –