請寫出下列程式的輸出結果:
#includechar *c = ;
char **cp = ;
char ***cpp = cp;
int main(void)
做這道題之前,我們先明確幾個概念:1、p++,p--,++p,--p會影響指標的指向。
例如:
++p相當於p = p + 1; 指標會儲存改變後的指向。
2、p+2;這樣表示式運算完後,指標指向不會受到影響,因為它並未儲存改變後的指向。
3、陣列與指標之間的轉換:分析:例如:
p[2] = *(p+2);p為陣列首位址,p相當於&p[0],p+2相當於&(p+2),最左邊加*,表示取值,即p[2]。
p[-1][-1] = *(*(p-1)-1);同理
① 對於 **++cpp來說,一開始cpp指向cp,即指向存放c+3的位址,
然後表示式先執行++cpp,指標後移,且儲存指向,即指向存放c+2的位址,
之後*++cpp,解一層引用,指向位址中的內容c+2,即指向*c中存放第三個字串的位址,
再執行**++cpp,即指向這個字串的第乙個的元素p,
然後輸出,從p開始輸出,遇到'\0'結束,即輸出 point
② 對於*--*++cpp+3來說,現在cpp已經指向存放c+2的位址了,
先執行++cpp,即cpp指向存放c+1的位址,
然後執行*++cpp,即cpp指向*c中存放第二個字串的位址,
再執行--*++cpp,即cpp指向*c中存放第乙個字串的位址,
再執行*--*++cpp,即cpp指向第乙個字串的第乙個字元e,
再執行*--*++cpp+3,即cpp指向第乙個字串的第四個字元e,
再輸出,結果為er
③ 對於*cpp[-2]+3,目前cpp指向存放c+1的位址,
將表示式化簡一下,即**(cpp-2)+3,
先執行cpp-2,cpp指向存放c+3的位址,
然後執行*(cpp-2),cpp指向*c中存放第四個字串的位址,
再執行**(cpp-2),cpp指向第四個字串的第乙個字元f,
再執行**(cpp-2)+3,cpp指向第四個字串的第四個字元s,
再輸出,結果為st
④ 對於cpp[-1][-1]+1,現在cpp還是指向存放c+1的位址,
將表示式化簡一下,即*(*(cpp-1)-1)+1,
先執行cpp-1,cpp執行存放c+2的位址,
然後執行*(cpp-1),cpp指向*c中存放第三個字串的位址,
再執行*(cpp-1)-1,cpp指向*c中存放第二個字串的位址,
再執行*(*(cpp-1)-1),cpp指向第二個字串的第乙個字元n,
再執行*(*(cpp-1)-1)+1,cpp指向第二個字串的第二個字元e,
輸出,結果為ew
牛客網刷題筆記
今天在牛客網刷了一道求最長字串是回文數的長度,剛開始的時候,我用兩個指標,乙個指前邊,乙個指後邊,對比兩個指標指向的值,相等則前邊的指標後移,後邊的指標前移,然後再判斷是否相等,如果不相等,那麼就不是回文數,前邊的指標回到第一次開始的地方,後邊的指標回到第一次開始的地方,前邊的指標再自加後移移位,然...
牛客網刷題
時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 立華奏在學習初中數學的時候遇到了這樣一道大水題 設箱子內有 n 個球,其中給 m 個球打上標記,設一次摸球摸到每乙個球的概率均等,求一次摸球摸到打標記的球的概率 e...
牛客網刷題
時間限制 c c 2秒,其他語言4秒 空間限制 c c 524288k,其他語言1048576k 64bit io format lld 立華奏是乙個剛剛開始學習 oi 的萌新。最近,實力強大的 qingyu 當選了 iods 9102 的出題人。眾所周知,iods 是一場極其毒瘤的比賽。為了在這次...