【发布时间】:2013-09-10 20:47:28
【问题描述】:
在下面的例子中,为什么我不能使用
scanf("%s%d%d", p.name, p.age, p.code);
如果变量p已经有了地址,那我为什么要放&p->age而不是p.age呢?
为什么我需要使用 'p->name' 从键盘读取字符串而不是 p.name 或 &p->name?
如果p->name 等于(*p).name,并且scanf("%s",&variable) 需要一个地址,那么如果(*p).name 将p 指向的值传递给函数scanf,它是如何工作的?
#include <stdio.h>
#include <stdlib.h>
struct person{
char name[60];
int age;
int code;
};
void printdata(struct person *p){
printf("%s, %d, %d",p->name, p->age, p->code);
}
int main(int argc, char *argv[]){
struct person *p;
p = (struct person*) malloc(sizeof(struct person));
scanf("%s%d%d", p->name, &p->age, &p->code);
printdata(p);
free(p);
return 0;
}
【问题讨论】:
标签: c pointers struct dereference