C 指针及其使用:*&;宝洁公司*P它们合法吗?

C 指针及其使用:*&;宝洁公司*P它们合法吗?,c,C,嗨,我是C编程新手。我试着弄明白*&p和&*p指针是什么意思?它有帮助吗 q=*&p 它们不是操作,只是会产生编译时错误。因此,它们可以在宏中用作断言*&l确保l是左值,&*p确保p是(隐式转换为)指针 #define ASSERT_LVALUE(l) (void)(*&(l)) #define ASSERT_POINTER(p) (void)(&*(p)) int main(void) { int* p; int i; ASSERT_LV

嗨,我是C编程新手。我试着弄明白*&p和&*p指针是什么意思?它有帮助吗

q=*&p

它们不是操作,只是会产生编译时错误。因此,它们可以在宏中用作断言
*&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;
}

它曾经帮助过你吗?我从未使用过它。
&*p
适用于阵列。所以它实际上测试
p
是否可以隐式转换为指针