【发布时间】:2019-11-08 21:30:25
【问题描述】:
我有点困惑,为什么这段代码有效:
struct product{
double price;
int quantity;
char name[1];
}p2;
printf("%d",p2.quantity);
虽然这不起作用:
struct product *p3=&p2;
printf("%d",p3.quantity);
我的意思是p2 和p3 都是指向同一个对象的指针,所以为什么我们需要在第二种情况下写printf("%d",p3->quantity); 才能让它工作。
【问题讨论】:
-
p2 不是指针。
-
p2不是指针,只有&p2会产生一个。 -
我认为您需要 C 底漆:
.点代表struct成员。->箭头用于指针目标。 -
Arrow Operator vs. Dot Operator 的可能重复项:“箭头”运算符是“语法糖”。
bar->member与(*bar).member相同。前者更具可读性。所以你可以使用printf("%d",(*p3).quantity);,如果你愿意的话;) -
没有。 “p2” 不是 一个指针。问:“p2 怎么不是指针那么它是什么?” A: p3 ;) 结构是结构,指向结构的指针是指针......并且永远不会相遇 ;)