为了账号安全,请及时绑定邮箱和手机立即绑定

帮忙看一下这个关于C语言结构体的一个疑问!

帮忙看一下这个关于C语言结构体的一个疑问!

C C++
犯罪嫌疑人X 2021-11-03 20:11:45
#include<stdio.h>struct info{int k;char*s;}t;void f(struct info t){t.k=1997;t.s="Borland";}void main(){t.k=2000;t.s="Inprise";f(t);printf("%d,%s\n",t.k,t.s);}用VC6.0编译后,结果是2000,Inprise请问这是为什么呢?难道那个函数调用一点用都没有?Press any key to continue
查看完整描述

3 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

你的函数调用是采用值传递的方式,也就是在f函数中另外生成一个结构体,你改变的是这个新生成的结构体的值,main中的结构体t的值不变。
可改用地址传递的方式:
#include<stdio.h>
struct info
{
int k;
char*s;
}t;
void f(struct info *t)
{
t->k=1997;
t->s="Borland";
}
void main()
{
t.k=2000;
t.s="Inprise";
f(&t);
printf("%d,%s\n",t.k,t.s);
}



查看完整回答
反对 回复 2021-11-09
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

一个或多个其他数据类型组成。
那个sin_family,sin_port ,sin_addr都是结构体sockaddr_in的一部分,既然整个结构体都传进去了,那么他的每部分自然都被传递。函数的参数可以是任何数据类型,自然也能是结构体
比如说你bind(sockfd, (struct sockaddr *)&server_sockaddr, sizeof(struct sockaddr))
那么在bind函数里用my_addr->sin_port就能得到他的端口,my_addr->sin_addr就能得到他的地址。

查看完整回答
反对 回复 2021-11-09
?
呼唤远方

TA贡献1856条经验 获得超11个赞

将地址传入才会有变化,传结构体在函数中只有传入参数的副本,修改的也只是其副本,建议F9下断点,单步运行调试看看memory就知道了。可修改如下:
#include<stdio.h>
struct info
{
int k;
char*s;
}t;
void f(struct info* t)
{
t->k=1997;
t->s="Borland";
}
void main()
{
t.k=2000;
t.s="Inprise";
f(&t);
printf("%d,%s\n",t.k,t.s);
}



查看完整回答
反对 回复 2021-11-09
  • 3 回答
  • 0 关注
  • 267 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信