作者ILoveSoyMilk (無糖豆漿)
看板C_and_CPP
標題[問題] 一個二維陣列指標問題
時間Sun Jun 3 00:02:41 2018
開發平台(Platform): (Ex: Win10, Linux, ...)
Win10
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
Compile and Execute C++ Online (GNU GCC v7.1.1)
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
這是個人之前在計概題目看到的一個題目。
一個二維陣列以int a[2][2] = {{5,6},{7,8}}表示
然後分別想問cout出來的
(*a+1)[1]的值?
*(a+1)[1]的值?
我用C++ online compiler跑出來的結果是
7
4196368
我想請問這其中運算子的邏輯,我不太清楚陣列的subscript[],
和pointer之間會怎麼運作,其中的優先順序讓我很頭痛。
我目前已知"() []"最優先運算,
再來是"*",
之後才是"+"(如果是加法運算的話),
還有我不確定這個"+"是"正負號"還是"加法",
是"正負號"的話,則"+"的優先順序會高於"*"(右結合)。
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
#include <iostream>
using namespace std;
int main()
{
int a[2][2] = {{5,6},{7,8}};
cout << (*a+1)[1] << endl;
cout << *(a+1)[1];
return 0;
}
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.176.94.131
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1527955363.A.1A9.html
1F:→ bluesoul: 直接括號刮好就沒問題了 06/03 00:12
2F:推 stupid0319: 不用記運算元優先,刮好刮滿就好了 06/03 00:31
3F:推 wei115: 順序大概記一下就好了,加號和正號前後文應該可以分出來 06/03 03:04
4F:→ wei115: 不確定就用括號八... 06/03 03:05
謝謝各位的回答
我後來經朋友指點找到
使用pointer轉換array的方式
(*(a+x))[y]
a是陣列
x是第幾列(row)
y是第行(column)
出來的答案等同a[x][y]
※ 編輯: ILoveSoyMilk (180.176.94.131), 06/03/2018 10:54:23
5F:→ stupid0319: 你宣告陣列,然後用指標存取,只怕隊友會搞不清楚 06/03 11:23