鱼C论坛

 找回密码
 立即注册
查看: 1617|回复: 1

[已解决]下面两个问题答案都是怎么得到的??这两个问题的函数f应该怎么理解??

[复制链接]
发表于 2019-2-3 14:08:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include  <stdio.h>
typedef struct stu{
        char name[10];
        char gender;
        int score;
}STU;
void f(STU*a,STU*b)
{
        b=a;
        printf(" %s, %c,  %d",b->name,b->gender,b->score);
}
void main()
{
        STU a={"Zhao",'m',290},b={"Qian",'f',350};
        f(&a,&b);
        printf("  %s, %c,  %d\n",b.name,b.gender,b.score);
}
结果是Zhao,m,290    Qian,f, 350        这个输出结果在调用一次函数后,再输出的b.name,b.gender,b.score,为啥是Qian,f, 350??输出的结果和函数调用没有关系吗??


#include <stdio.h>
typedef struct stu {
   char  name[10];
   char  gender;
   int  score;
} STU;
void f(STU  a, STU  *b)
{  *b = a;
  printf("%s,%c,%d,", b->name, b->gender, b->score);
}
main( )
{  
   STU a={"Zhao", ’M’, 290}, b={"Qian", ’f’, 350};
   f(a,&b);
   printf("%s,%c,%d\n", b.name, b.gender, b.score);
}
程序运行后的输出结果是(  )。
A
Zhao,m,290,Zhao,m,290
B
Qian,f,350,Zhao,m,290
C
Qian,f,350,Qian,f,350
D
Zhao,m,290,Qian,f,350
【答案】
A
最佳答案
2019-2-3 16:16:17
void f(STU*a,STU*b)                //在进入函数时,a,b两个结构的地址给了函数里的指针a和b
{
        b=a;                               //这里将a的地址给了b,那么函数里的b输出的应该是结构a的内容 关键来了:主函数里结构b的地址并未改变,变化的只不过是f函数里的b
                                              //在调用函数时,只不过是将b的地址发给了f_b,f_b发生地址的改变,与主函数里的b无关
        printf(" %s, %c,  %d",b->name,b->gender,b->score);
}

void f(STU  a, STU  *b)
{  *b = a;                                          //而第二道题,这个却是改变的f_b的内容,f_b的地址指向b,所以内容是谁的内容,就是b的内容,所以 函数里f_b的地址改变
                                                        // 不影响b 但是f_b的内容变 b的内容也就变了
printf("%s,%c,%d,", b->name, b->gender, b->score);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-2-3 16:16:17 | 显示全部楼层    本楼为最佳答案   
void f(STU*a,STU*b)                //在进入函数时,a,b两个结构的地址给了函数里的指针a和b
{
        b=a;                               //这里将a的地址给了b,那么函数里的b输出的应该是结构a的内容 关键来了:主函数里结构b的地址并未改变,变化的只不过是f函数里的b
                                              //在调用函数时,只不过是将b的地址发给了f_b,f_b发生地址的改变,与主函数里的b无关
        printf(" %s, %c,  %d",b->name,b->gender,b->score);
}

void f(STU  a, STU  *b)
{  *b = a;                                          //而第二道题,这个却是改变的f_b的内容,f_b的地址指向b,所以内容是谁的内容,就是b的内容,所以 函数里f_b的地址改变
                                                        // 不影响b 但是f_b的内容变 b的内容也就变了
printf("%s,%c,%d,", b->name, b->gender, b->score);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-3 06:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表