牛客網刷題筆記之指標題(超詳細解答過程)

2021-09-25 06:59:56 字數 1683 閱讀 5398

請寫出下列程式的輸出結果:

#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 是一場極其毒瘤的比賽。為了在這次...