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);
}
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就能得到他的地址。
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);
}
- 3 回答
- 0 关注
- 267 浏览
添加回答
举报