您好我是C编程的新手。我试着找出*& p和& * p指针的含义是什么?它有没有帮助过?
q=*&p
答案 0 :(得分: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;
}