C C++数组....需要帮助理解代码

use*_*514 3 c++ loops

你能解释一下这段代码吗?这对我来说似乎有点混乱"a"是一个双阵列?我认为它只是一个整数,但在cout语句中它被用作双数组.同样在for循环条件中它表示<3 [b]/3-3,这对我没有意义,但是代码编译并运行.我只是在理解它时遇到了麻烦,对我来说,语法似乎不正确

int a,b[]={3,6,5,24};
char c[]="This code is really easy?";
for(a=0;a<3[b]/3-3;a++)
{
cout<<a[b][c];
}
Run Code Online (Sandbox Code Playgroud)

Ano*_*on. 7

数组访问器几乎是指针算术的语法糖.a[b]相当于b[a]相当于*(a+b).

也就是说,使用index[array]而不是array[index]完全可怕,你永远不应该使用它.

  • 我认为这是我第一次看到有人说为什么a [b]和b [a]是等价的...现在看来它显得非常明显,但看到它写成*(a + b)经过多年的C编码后,语法终于明白了. (3认同)
  • @Anon:有一次我使用`index [array]`形式 - 在一个宏中获取数组中元素的数量.使用`index [array]`形式可以防止表达式意外地为一个重载'`[]`'运算符的C++类工作(诚然,这是一个非常专业的用法). (2认同)

Joh*_*ler 6

哇.这真的很时髦.这不是真正的二维数组.它的工作原理是因为它c是一个数组,并且在C语言中有一个对待它的标识

b[3]
Run Code Online (Sandbox Code Playgroud)

和此一样

3[b]
Run Code Online (Sandbox Code Playgroud)

所以这段代码转换成一个循环,增加一段时间,a < (24/3-3)因为3[b]b[3]与b [3]是24相同.然后它使用a[b](它是相同的b[a])作为数组c的索引.

所以,这段代码没有混淆

int a;
int b[] = {3,5,6,24}
char c[] = "This code is really easy?";
for (a = 0; a < 5; a++)
{
    cout << c[b[a]];
}
Run Code Online (Sandbox Code Playgroud)

因为b [4]不存在而被破坏,所以输出应该是字符串c的第3,第5,第6和第24个字符或者

sco?
Run Code Online (Sandbox Code Playgroud)

然后是一些随机字符或崩溃.