C语言中的结构体作为函数参数,不会修改实参的值的问题 | 您所在的位置:网站首页 › 函数调用不可以做形参吗 › C语言中的结构体作为函数参数,不会修改实参的值的问题 |
在做小项目时遇到一个问题,将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 实验室设备网 版权所有 |