#include<stdio.h>
struct data{
int i;
struct data *p;
};
int main() {
struct data *p=malloc(sizeof(struct data));
//How do i use pointer to structure to read a integer in member variable i?
scanf("%d",&p->i); // I am advised to use this,Can you interpret this??
scanf("%d",&(*p).i); // Is this valid?
scanf("%d",p->i); // Why is this not valid since p is nothing but a pointer
}
解释此&p->i
。为什么这代表成员变量i的地址?
这scanf("%d",&(*p).i);
有效吗?为什么呢?
答案 0 :(得分:4)
在你的情况下
&p->i
与&(p->i)
相同。&(*p).i
与&(p->i)
相同。并且它们都生成一个指向整数的指针,这是scanf()
函数参数根据提供的转换说明符所要求的。
然而,
scanf("%d",p->i);
无效,因为p->i
会为您提供int
,而您需要一个指向整数的指针。
答案 1 :(得分:2)
scanf
需要指向某个内容的指针,以便根据您为该函数提供的格式存储数据。
scanf("%d",&p->i); // I am advised to use this,Can you interpret this??
p->i
为i
指向的结构提供整数p
。
&p->i
提供了i
的地址,是scanf所必需的。
scanf("%d",&(*p).i); //Is this valid?
是的,这和上面一样。 (*p).i
为p->i
scanf("%d",p->i); //Why is this not valid since p is nothing but a pointer
scanf
需要一个指针来存储&#34;%d&#34;,这意味着一个整数;但是,在这里你给出了i
的值,而不是指向i
的指针。