例:
int main()
;char**cp = ;
char***cpp = cp;
printf("%s\n", **++cpp);
printf("%s\n", *--*++cpp+3);
printf("%s\n", *cpp[-2]+3);
printf("%s\n", cpp[-1][-1]+1);
return 0;
}
根據題意畫出大致記憶體圖:
首先,多個單目運算子運算順序從右往左。
int* p
p + 1 跳過乙個int型元素。
int** p
p + 1跳過乙個char*型別元素。
其他型別相似。
第一問:
printf("%s\n", **++cpp);
當前cpp中存的是char* * *型別,
++cpp跳過乙個char * *型別元素,得到:0x2004
*++cpp 得到:0x1008
**++cpp 得到:0x300
%s 得到:point
第二問:
printf("%s\n", *--*++cpp+3);
接上一問,cpp中存的已經變成了0x2004,
++cpp 得到:0x2008
++cpp 得到:0x1004
–++cpp 得到:0x1000
–++cpp 得到:0x100
–++cpp+3 得到:0x103 //char*+3跳過3個char型別元素
%s 得到:er
第三問:
printf("%s\n", *cpp[-2]+3);
接上一問,cpp中存的已經變成了0x2008
cpp[-2] 相當於 *(p - 2),這樣並不會改變cpp中存的內容,
(p - 2)得到:0x2000
*(p - 2)得到:0x100c
*cpp[-2] 得到:0x400
*cpp[-2]+3 得到:0x403
%s 得到:st
第四問:
printf("%s\n", cpp[-1][-1]+1);
cpp中存的還是0x2008
cpp[-1]相當於*(cpp-1),經過計算得到:0x1008
cpp[-1][-1] 得到:0x200
cpp[-1][-1]+1 得到:0x201
%s 得到:ew
HZNUOJ2129這是壓軸題
給定兩個數a,b,輸出a b 有t組輸入 對於每組輸入有兩個非負整數a,b 10 210 對於每組資料輸出a b input copy 2 1 1 2 2 output copy 2 4注意此題的資料範圍,所以不可以用int 或者long long int 直接相加 此題要運用到字串來完成相加 將各...
浙江省賽壓軸題 Floor Function
給定a,b,c,d 滿足bc ad 求使得cn d abn 最小的最小的n 資料規模 1 a,b,c,d 1018 令y abx x bya 原問題等價於求cx dy 的最小值,ax by,x 1,y 0 分兩種情況考慮 1.a b 令k ab y kx,c ad b kd 令a a kb,c c ...
美團2021後端開發崗位筆試 壓軸題
某公司需要抽調一批人組建 a b 兩隻隊伍,去參加一項比賽,兩隻隊伍的人數人別是x 和 y 給定 x y 個整數,代表這 批人的技術水平,賽事租會根據計算該公司的實力水平,該公司的實力水平等於兩隻隊伍的平均水平之和,而每只隊伍的平均水平等於該隊伍的所有人的水平之和除以該隊伍的人數,現在需要你進行分配...