作者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/cn.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