非欧切尔 2022-12-12 13:15 采纳率: 90.4%
浏览 25
已结题

答案为什么是B呀?谁可以详细解释一下?

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

typedef struct stu

{

char  *name, gender;

int  score;

} STU;

void f(char *p)

{

p=(char *)malloc(10);

strcpy(p, "Qian");

}

main()

{

STU  a= {NULL, 'm', 290}, b;

a.name=(char *)malloc(10);

strcpy( a.name, "Zhao" );

b = a;

f(b.name);

b.gender = 'f';

b.score = 350;

printf("%s,%c,%d,", a.name, a.gender, a.score);

printf("%s,%c,%d\\n", b.name, b.gender, b.score);

}

则程序的输出结果是()。

A

Zhao,m,290,Qian,f,350
B

Zhao,m,290,Zhao,f,350
C

Qian,f,350,Qian,f,350
D

Qian,m,290,Qian,f,350
  • 写回答

3条回答 默认 最新

  • 於黾 2022-12-12 13:37
    关注

    这题的考点其实就在这里:
    “修改形参的值永远不会改变实参”
    实参和形参其实跟两个变量赋值是一样一样的
    比如int a=0;int b=a;b=2;那么b被修改了a并不会被修改,因为b只是a的一个拷贝。假如a是实参b是形参那么结果是一样的。
    当a和b是两个指针的时候也是如此。
    int c=0;int *a=&c;int *b=a;此时a和b这两个指针都指向c的地址,如果修改*a或*b修改的都是c的值。
    而如果执行的是b=&(int *)malloc(1);将它重新指向一个新的内存,此时改变的是指针的值(指针的值就是地址),再改变b的时候就和c无关了。
    也就是说,当b的值(指针地址)被改变时,并不会改变a

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月20日
  • 已采纳回答 12月12日
  • 创建了问题 12月12日

悬赏问题

  • ¥15 对于知识的学以致用的解释
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败