yuchu3d 2022-01-04 12:28 采纳率: 80%
浏览 132
已结题

C语言,在结构变量中,为什么被调函数的结构变量指针可以改变实参,而直接调用结构体却不行呢

看下面的额程序:


```c
#include<stdio.h>

struct gas mpg1(struct gas che);

void mpg2(struct gas *aut);

struct gas

{
    float distance;
    
    float gals;
    
    float mpg;    
};

int main(void)

{
    struct gas car={
        
        100.0,
        
        10.0,
        
        10.0
    };
    
    printf("When the car goes %.3f KM and used %.3f oil, the mpg is %.3f .\n",car.distance,car.gals,car.mpg);
    
    printf("***************\n");
    
    mpg1(car);
    
    printf("这里的数值没有发生变化:\n");
    
    printf("When the car goes %.3f KM and used %.3f oil, the mpg is %.3f .\n",car.distance,car.gals,car.mpg);
    
    car=mpg1(car);
    
    printf("引用之后发生了变化:\n");
    
    printf("When the car goes %.3f KM and used %.3f oil, the mpg is %.3f .\n",car.distance,car.gals,car.mpg);
    
    printf("***************\n");
    
    mpg2(&car);    
    
    printf("When the car goes %.3f KM and used %.3f oil, the mpg is %.3f .\n",car.distance,car.gals,car.mpg);
    
    return 0;    
    
}

struct gas mpg1(struct gas che)

{
    
    che.distance=134;
    
    che.gals=12;
    
    che.mpg=11.17;
    
    return che;
    
}

void mpg2(struct gas *aut)

{
    aut->distance=98.8;
    
    aut->gals=11.1;
    
    aut->mpg=8.9;    
}


运行结果:

img

问题: 为什么指针直接改变了 实参,而 直接用结构体 却不能改变 实参呢?

  • 写回答

8条回答 默认 最新

  • 关注
    获得0.40元问题酬金

    值传递与地址传递的问题。
    mpg2(&car); 是将car的地址传到函数mpg1()中,函数中进行修改,外部地址对应的car的值也会随之修改。
    mpg1(car);是值传递,将cat的值传进mpg1()函数中,作用域是函数中。函数中参数的改变不会改变函数外的值。
    car=mpg1(car);虽然mpg1(car)函数里面值的修改不会直接引起car的改变,但是函数最后retrun返回修改的参数,并且赋值给外部car,这样外部的car值也会随之改变。

    望采纳

    评论

报告相同问题?

问题事件

  • 系统已结题 1月12日
  • 修改了问题 1月4日
  • 创建了问题 1月4日

悬赏问题

  • ¥15 C++ 句柄后台鼠标拖动如何实现
  • ¥15 有人会SIRIUS 5.8.0这个软件吗
  • ¥30 comsol仿真等离激元
  • ¥15 静电纺丝煅烧后如何得到柔性纤维
  • ¥15 (标签-react native|关键词-镜像源)
  • ¥100 照片生成3D人脸视频
  • ¥15 伪装视频时长问题修改MP4的时长问题,
  • ¥15 JETSON NANO
  • ¥15 VS开发qt时如何在paintgl函数中用pushbutton控制切换纹理
  • ¥20 关于 openpyxl 处理excel文件地问题