C语言中的结构体作为函数参数,不会修改实参的值的问题 您所在的位置:网站首页 函数调用不可以做形参吗 C语言中的结构体作为函数参数,不会修改实参的值的问题

C语言中的结构体作为函数参数,不会修改实参的值的问题

2024-06-17 19:55| 来源: 网络整理| 查看: 265

在做小项目时遇到一个问题,将main函数的结构体作为参数传递时,在函数中修改结构体的值,出了函数后不会修改实参的值,即C语言中将结构体作为参数传递时,并不会改变实参的值! 原因是当结构体指针传递给函数时,会拷贝一份指针的值,但是函数内部的指针和函数外部的指针并不是指向同一个引用的,所以才会使得函数里面改变了,但是函数外部无变化,解决方案是在传参的时候,将结构体指针的传递过去,同时将原来的 ’ .属性’改为’->属性’符号。

无效的传递方式 :

这样写函数,传递来的指针和函数内部的指针不是同一个

int create_user(Account act) { act.user = 1001; act.money = 0; char filename[40] = {}; sprintf(filename,"%ld.txt",act.user); int fd = open(filename,O_WRONLY|O_CREAT|O_EXCL,0644); if(0 > fd) { perror("open"); return -1; } write(fd,&act,sizeof(Account)); user++; puts("保存账户成功"); close(fd); return 0; }

有效的传递方式 :

在Account结构体后加上*,这样传递过来的指针和函数内部的指针就使用的是同一个了,同时将.属性改为->属性

int create_user(Account* act) { act->user = 1001; act->money = 0; char filename[40] = {}; sprintf(filename,"%ld.txt",act->user); int fd = open(filename,O_WRONLY|O_CREAT|O_EXCL,0644); if(0 > fd) { perror("open"); return -1; } write(fd,act,sizeof(Account)); user++; puts("保存账户成功"); close(fd); return 0; }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有