日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C指针笔试题,蛋疼的多重指针运算,谭浩强的阴影

發布時間:2025/6/17 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C指针笔试题,蛋疼的多重指针运算,谭浩强的阴影 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對指針的概念清晰的話,做這種題只要耐心就行,然而看這種題就煩(被同學吐槽為譚浩強的陰影……草泥馬這種C風格題有意義嗎?出題人腦子被門夾了?而且C++11都不支持字面值字符串直接轉換成char*了。好吧,就算要大罵一通出題人,該做還是做。)

分析三行初始化代碼:

1、c[0]指向"HELLO",c[1]指向"NEW",c[2]指向"WORLD",c[3]指向"SAYHI"。

cp[0]=c+3,即cp[0]=&c[3],因此

2、cp[0]指向c[3],cp[1]指向c[2],cp[2]指向c[1],cp[3]指向c

cpp=cp,cp類型是char**[4]類型,數組a在作為等號的右參數時會降格成&a[0],因此cpp=&cp[0]

3、cpp指向cp[0]

現在到這里來一個個分析語句

1、**++cpp

++cpp,即cpp=cpp+1 ?【改變了cpp的值】

指針+1是怎么運算呢?這里我還卡住了

舉例,int a[] = { 1,2,3 }; int* p = a; p++; ?這里p是int*的指針,p++就指向了a[1],相當于p指向的地址向后移動了sizeof(*p)個字節。

OK,cpp指向cp[0],++cpp就是cpp=&(cp[0]+sizeof(*cpp))即cpp=&cp[1];

接著就是2次解引用,*++cpp就是*(&cp[1])也就是cp[1],**++cpp就是*cp[1]=*(&c[2])即c[2],結果是

WORLD

注意!這里的運算改變了cpp的值!這一句執行后cpp指向的是cp[1]!

2、*--*++cpp+3

注意+運算優先級是低于*、&、前置++、前置--(這4個同級)。

?

++cpp = &cp[2] ? 【改變了cpp的值】

*++cpp = *(&cp[2])即cp[2]

--*++cpp = --cp[2] = &(c[1]-sizeof(c[1])) = &c[0]。

*--*++cpp = *(&c[0]) = c[0],最后c[0]+3

LO

注意!這里的運算改變了cpp的值!這一句執行后cpp指向的是cp[2]!

3、*cpp[-2]+3

注意[]運算優先級是高于*、&、前置++、前置--

這里回顧數組下標運算符[]:int a[] = { 1,2,3 }; int p = a[1]; 即int p = *(a + 1)

cpp[-2] = *(cpp-2) = *&(cp[2]-2*sizeof(cp[2])) = *&cp[0] = cp[0]

*cpp[-2] = *cp[0] = *(c+3) = c[3]

*cpp[-2]+3即

HI

注意!這里的運算并未改變cpp的值!這一句執行后cpp指向的是cp[2]!

4、cpp[-1][-1]+1

cpp[-1] = *(cpp-1) = *&(cp[2]-sizeof(cp[2]) = *&cp[1] = cp[1]

cpp[-1][-1] = *(cp[1]-1) = *(c+2-1) = *(c+1) = c[1]

cpp[-1][-1]+1 = c[1]+1即

EW

?

呼,做完了還是想罵一句草泥馬=_,=

轉載于:https://www.cnblogs.com/Harley-Quinn/p/7513077.html

總結

以上是生活随笔為你收集整理的C指针笔试题,蛋疼的多重指针运算,谭浩强的阴影的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。