我在期末考试中发现了这一点:
int a = 564;
int* pa = &a;
int *& pr = pa;
cout << *pr;
根据多项选择答案,代码有效,并显示a。
的值但是我对第3行的评估和优先级感到困惑.C的操作顺序是*和&amp;有相同的订单。那么,它会int *(&pr)
吗?如何用文字描述?
谢谢。
答案 0 :(得分:5)
第三行定义指针引用(或指针的引用,如果需要)。将其分配给指针会使pr
实际上成为pa
的别名,并且在评估时,它会指向pa
指向的位置,即a
。
在变量声明中,*
和&
没有运算符的含义,因此优先级在这里没有意义。
答案 1 :(得分:3)
它是指针的引用。在C中,您可以将其表示为指针的指针。
你可以这样写:
// C++ style
void update_my_ptr(int*& ptr) { ptr = new int[1024]; }
// C style
void update_my_ptr_c(int **ptr) { *ptr = malloc(1024 * sizeof(int)); }
int main()
{
int *ptr;
update_my_ptr(ptr);
// Here ptr is allocated!
}
答案 2 :(得分:1)
第三行创建指向int
的指针的引用(读:别名)。如果您将pr
设置为0,pa
也将等于0(反之亦然)。