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

structperson{intage;};structpersonaa;structperson*bb;bb=(structperson*)malloc(sizeof(... 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 就是个地址,为什么还要加个取地址符&呢?
展开
 我来答
哎呀……18a91a6
2019-07-24 · TA获得超过4.2万个赞
知道大有可为答主
回答量:7246
采纳率:76%
帮助的人:3045万
展开全部
1、“struct person* bb;” 这一句,确定了bb是个指针。

2、所以,你需要取的是bb这个指针指向的地址,所以,前面需要加&。
3、如果你定义的是 “struct person bb;”,那么,bb就是struct的实体,取其成员age的值时,就不需要前面加&。
4、C++的地址的理解的确是个很头痛,很费脑筯的问题,多看多练吧。
最大的宝宝
2019-07-24 · TA获得超过828个赞
知道小有建树答主
回答量:1569
采纳率:67%
帮助的人:409万
展开全部
有这个疑问是因为你还不理解函数调用时实际发生了什么事情。假如不用&,那么在调用scanf函数之前,会把bb->age这个变量存储的值取出,压入到堆栈,如果用了&,就会把bb->age变量的地址压入堆栈。所以认为bb->age是一个地址并没有问题,问题是编译器在处理函数调用时所做的比你想像的要复杂一些,你的想法适用于赋值这种相对直观的操作
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式