怎么做
- 题面里的虚线方框就是要填的空
- 点候选项,它会填进当前高亮的那个空
- 点已填好的空,可以把选项取回来重选
- 全部填满后「提交」才会亮起
卡住了就点右下角的 👩🏫 问 AI 老师,她会给提示但不直接给答案。
结构体传给函数:复印件还是原件
函数拿到的是复印件,还是原件的地址?
传值 f(a):函数里改的是副本,原件不变
原件 85
副本 90
副本已销毁
传地址 f(&a):函数顺着地址改原件
原件 85
原件 90
←
p->score
结构体可以当函数的参数,有两种传法,效果完全不同:
#include <stdio.h>
typedef struct {
char name[20];
int score;
} STU;
void add1(STU s) /* 传值:s 是 a 的一份复制 */
{
s.score = s.score + 10;
}
void add2(STU *p) /* 传地址:p 指向 a 本身 */
{
p->score = p->score + 10;
}
int main(void)
{
STU a = {"小林", 70};
add1(a);
printf("%d\n", a.score);
add2(&a);
printf("%d\n", a.score);
return 0;
}
- 传结构体变量
add1(a):形参 s 是整张卡片的复印件,函数结束复印件就销毁,改了也白改。 - 传结构体指针
add2(&a):函数拿到 a 的地址,用p->成员改的就是 a 本身;而且不用复制整张卡片,更省。 - 只读不改的函数,两种都行;要改原件,就传地址。
程序第一行输出【0】,第二行输出【1】;调用 add2 时实参写的是【2】。
请登录后作答。
去登录
👩🏫
AI
💬 题目评论
🔒
登录并作答后可看讨论