指针和使用它:*& p和& * p?他们合法吗?

时间:2017-10-12 22:18:01

标签: c

您好我是C编程的新手。我试着找出*& p和& * p指针的含义是什么?它有没有帮助过?

q=*&p

1 个答案:

答案 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;
}