[爆卦]二維指標陣列是什麼?優點缺點精華區懶人包

為什麼這篇二維指標陣列鄉民發文收入到精華區:因為在二維指標陣列這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者ILoveSoyMilk (無糖豆漿)看板C_and_CPP標題[問題] 一個二維陣列指標問題時...


開發平台(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://www.ptt.cc/bbs/C_and_CPP/M.1527955363.A.1A9.html
bluesoul: 直接括號刮好就沒問題了 06/03 00:12
stupid0319: 不用記運算元優先,刮好刮滿就好了 06/03 00:31
wei115: 順序大概記一下就好了,加號和正號前後文應該可以分出來 06/03 03:04
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
stupid0319: 你宣告陣列,然後用指標存取,只怕隊友會搞不清楚 06/03 11:23
lightyen: https://glot.io/snippets/f1nuyipj4h 06/04 13:31

你可能也想看看

搜尋相關網站