C语言结构体指针赋值问题,求大神给个解释?

struct person {
int age;
};
struct person aa;
struct person* bb;

bb = (struct person*) malloc(sizeof(struct person));
memset( bb, 0, sizeof(struct person));

scanf( " %d", &bb->age);

我的问题是:
往地址中存储输入的值,不是用 bb->age 吗? 而 bb->age 就是个地址,为什么还要加个取地址符&呢?

1、“struct person* bb;” 这一句,确定了bb是个指针。

2、所以,你需要取的是bb这个指针指向的地址,所以,前面需要加&。
3、如果你定义的是 “struct person bb;”,那么,bb就是struct的实体,取其成员age的值时,就不需要前面加&。
4、C++的地址的理解的确是个很头痛,很费脑筯的问题,多看多练吧。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-07-24
有这个疑问是因为你还不理解函数调用时实际发生了什么事情。假如不用&,那么在调用scanf函数之前,会把bb->age这个变量存储的值取出,压入到堆栈,如果用了&,就会把bb->age变量的地址压入堆栈。所以认为bb->age是一个地址并没有问题,问题是编译器在处理函数调用时所做的比你想像的要复杂一些,你的想法适用于赋值这种相对直观的操作
相似回答