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

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

返回在被調用函數中聲明的指針會發生什么?

返回在被調用函數中聲明的指針會發生什么?

收到一只叮咚 2019-04-07 11:19:22
例如程序:c#includeint*return_sth(){inttmp=5;int*ptr=&tmp;returnptr;}intmain(void){printf("%p,%d\n",return_sth(),*return_sth());inttmp=10;int*ptr2=&tmp;printf("%p,%d\n",ptr2,tmp);return0;}運行結果:$./a.out0x7ffc5e2c6274,50x7ffc5e2c6294,10很明顯,在return_sth()返回之后,*ptr是未定義的,那么ptr呢?仍然存在還是一樣是未定義的?
查看完整描述

2 回答

?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

printf("%p,%d\n",return_sth(),*return_sth());
中,return_sth()返回ptr的值,也就是一個地址,雖然與int不匹配,但編譯器只會發出警告,但實際上還是一個地址,所以*return_sth()就是對這個地址解引用,當然也就是5了,不過你這程序看起來實在沒什么意思
                            
查看完整回答
反對 回復 2019-04-07
?
縹緲止盈

TA貢獻2041條經驗 獲得超4個贊

ptr的值就是tmp的地址,int*ptr=&tmp;以后ptr值就確定了,就像intretval=100;returnretval;一樣,不存在未定義的問題。
                            
查看完整回答
反對 回復 2019-04-07
  • 2 回答
  • 0 關注
  • 401 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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