第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

求大佬幫我解釋下這段代碼, 中間的*p++=1是什么意思????

求大佬幫我解釋下這段代碼, 中間的*p++=1是什么意思????

C
安之4183388 2017-06-08 14:34:30
#include<stdio.h>void fibonacci(int *p,int n){?*p++=1;?*p++=1;?while(n>2)?{??*p++=*(p-1)+*(p-2);???n--;?}}void main(){?int i,f[20];?fibonacci(f,20);?for(i=0;i<=19;i++)??printf("%d\n",f[i]);}
查看完整描述

4 回答

已采納
?
望遠

TA貢獻1017條經(jīng)驗 獲得超1032個贊

*p++有運算符運算順序的問題,首先*和++運算符同級,但是結(jié)合性是從右往左,先執(zhí)行p++后執(zhí)行*

所以*p++=1即:

指針p指向的地址先自增1(此時指針p還是指向原地址空間),然后它指向的地址空間賦值為1,完成這一操作后指針指向下一個地址。

查看完整回答
反對 回復 2017-06-08
  • 安之4183388
    安之4183388
    同等級的運算符運算順序是從右到左么????
  • onemoo
    onemoo
    同級運算符的運算順序不一定是從右到左的,具體是什么順序應該參考運算符優(yōu)先級和結(jié)合性表。
?
onemoo

TA貢獻883條經(jīng)驗 獲得超454個贊

你采納的那個答案有些問題。


其實 后置自增運算符 p++ 的優(yōu)先級是高于 解引用運算符 * 的。在他給的那個圖里,后置自增運算符應該分類第一優(yōu)先級中。

這樣的話,似乎解釋上沒有太大差別,不過其實自增運算解釋起來還是有些復雜的:

1. 也是 ++ 先運算:得到的相當于是 p 指針。

2. 然后再算解引用運算符:得到上一步獲得的指針所指的對象(也就是 p 開始時所指的對象)。

3. 最后算賦值運算符:將 1 賦值給上一步得到的那個 p 所指的對象。

并且因為自增運算符還會使 p 自增,所以 p 在語句結(jié)束后肯定自增了,也就是會指向后面的一個對象。


注意上一句我說的是“p 在語句結(jié)束后肯定自增了”,我并沒有說“p在語句結(jié)束后才自增”之類的話,也就是說 p 具體是在哪個時點自增的是無法確定的。對這個語句而言,能確定的僅僅是 p 在語句結(jié)束后肯定已經(jīng)自增過了。

也許你會說,既然不確定 p 是何時自增的,也許 p 在第 2 步之前就自增了,那么第 2 步解引用的也可能是自增后的 p 了嗎?

確實 p 自增時機不確定,也可能會在第 2 步前自增。但這和第 2 步解引用運算沒有關(guān)系——因為解引用的根本就不是 p 指針


我在第 1 步的描述中說的是“相當于是 p 指針”,沒有說“得到的是 p 指針”。因為 p++ 運算符得到的其實是當時 p 的值,并不是得到 p 指針本身。 或者說你可以認為 p++ 得到的是一個臨時指針,只不過該指針和 p 相等而已。所以后續(xù) p 是否自增什么的跟后面的運算沒有關(guān)系。


C 語言中有的運算符得到的是“對象的值”,有的運算符得到的是“對象本身”,請好好揣摩下這兩種說法的區(qū)別。比如第 2 步的解引用運算符,它得到的就是指針所指的對象本身,所以那一步中該對象會被賦值為 1。



所以你采納的那個答案中“此時指針p還是指向原地址空間”這句話其實也說錯了! 事實上并不能確定那時 p 是否已經(jīng)自增過了。



你這個代碼還有一個大問題:

*p++=*(p-1)+*(p-2); ?這語句的行為是未定義的!

道理和上面說的一樣,因為等號左邊有 p++ 表達式,這會使 p 自增,可是自增時機是不確定的,p 可能會在這語句執(zhí)行中的任何一個步驟時自增,所以等號右側(cè)那些 p-1 ?p+2 在計算時 p 的值是多少也是不確定的。那么整個表達式的結(jié)果就是未定義的!

查看完整回答
1 反對 回復 2017-06-09
?
灬elliott

TA貢獻63條經(jīng)驗 獲得超17個贊

p是地址,*p是這個地址指向的整數(shù), ? 意思就是把 ?*p+1之后的值賦值給*p

查看完整回答
反對 回復 2017-06-08
?
慕粉1146083187

TA貢獻12條經(jīng)驗 獲得超1個贊

指針p指向的地址先加1,然后它指向的值賦值為1,完成這一操作后指針指向改變,指向下一個地址。

查看完整回答
反對 回復 2017-06-08
  • 4 回答
  • 0 關(guān)注
  • 3722 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號