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

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

請教一個c語言指針的題目

請教一個c語言指針的題目

呼如林 2019-04-08 11:18:15
請幫忙解釋:#includevoidg(int**p){(**p)++;(*p)++;}intmain(intargc,char*argv[]){intline[10],i;int*p=line;for(i=0;i
查看完整描述

2 回答

?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

這也沒什么吧,line[0]=0,然后在g函數里,line[0]被++,同時這個p向前指向了line[1],然后line[1]=1,在g函數里,line[1]被++,同時這個p向前指向了line[2],...
                            
查看完整回答
反對 回復 2019-04-08
?
眼眸繁星

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

首先你要理解什么是一級指針,什么是二級指針
一級指針儲存的就是某個變量的地址
而二級指針就是存儲一級指針的地址
假設定義一個二級指針
inta=5;
int*p=&a;
int**pp=&p;
解引一次
*pp
是指向一級指針的地址,即*pp和&p是等價的
解引兩次
**pp
是一個變量的值,即**p和a是等價的
那么我們來看一下你的程序
*p=i;
g(&p);
第一次執行的時候p是指向line[0]的地址
所以第一個語句等價line[0]=0;
然后是執行g(&p)
這一句就相當于把p的地址傳給g()函數,所以g()函數使用了一個二級指針來接受這個變量
最后看一下g()函數
voidg(int**p)
{
(**p)++;
(*p)++;
}
開始已經說了**p是指向變量的值
所以第一句等價line[0]++;即line[0]的值變為1
而*p是指向一級指針的地址
這一句就等價于p++,那么這時候p就變成指向line[1]的地址了
以上一輪結束以后
再次進入main()函數里面的for循環
就等價(第二次執行for循環里面的語句)
line[1]=1;
g(&line[1]);
就是這樣子一直循環10遍
所以最后打印的結果是1至10
                            
查看完整回答
反對 回復 2019-04-08
  • 2 回答
  • 0 關注
  • 365 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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