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就知道了??尚薷娜缦拢?br/>#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 關注
- 305 瀏覽
添加回答
舉報