[問題] 一個二維陣列指標問題

作者: ILoveSoyMilk (無糖豆漿)   2018-06-03 00:02:41
開發平台(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):
作者: bluesoul (忙死你老爸)   2018-06-03 00:12:00
直接括號刮好就沒問題了
作者: stupid0319 (徵女友)   2018-06-03 00:31:00
不用記運算元優先,刮好刮滿就好了
作者: wei115 (ㄎㄎ)   2018-06-03 03:04:00
順序大概記一下就好了,加號和正號前後文應該可以分出來不確定就用括號八...
作者: stupid0319 (徵女友)   2018-06-03 11:23:00
你宣告陣列,然後用指標存取,只怕隊友會搞不清楚
作者: lightyen (lightyen)   2018-06-04 13:31:00

Links booklink

Contact Us: admin [ a t ] ucptt.com