3 回答

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊
你的函數(shù)調(diào)用是采用值傳遞的方式,也就是在f函數(shù)中另外生成一個(gè)結(jié)構(gòu)體,你改變的是這個(gè)新生成的結(jié)構(gòu)體的值,main中的結(jié)構(gòu)體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貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊
一個(gè)或多個(gè)其他數(shù)據(jù)類型組成。
那個(gè)sin_family,sin_port ,sin_addr都是結(jié)構(gòu)體sockaddr_in的一部分,既然整個(gè)結(jié)構(gòu)體都傳進(jìn)去了,那么他的每部分自然都被傳遞。函數(shù)的參數(shù)可以是任何數(shù)據(jù)類型,自然也能是結(jié)構(gòu)體
比如說你bind(sockfd, (struct sockaddr *)&server_sockaddr, sizeof(struct sockaddr))
那么在bind函數(shù)里用my_addr->sin_port就能得到他的端口,my_addr->sin_addr就能得到他的地址。

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個(gè)贊
將地址傳入才會(huì)有變化,傳結(jié)構(gòu)體在函數(shù)中只有傳入?yún)?shù)的副本,修改的也只是其副本,建議F9下斷點(diǎn),單步運(yùn)行調(diào)試看看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 關(guān)注
- 313 瀏覽
添加回答
舉報(bào)