亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

幫忙看一下這個關于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就知道了??尚薷娜缦拢?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);
}



查看完整回答
反對 回復 2021-11-09
  • 3 回答
  • 0 關注
  • 305 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號