你能解释一下这段代码吗?这对我来说似乎有点混乱 “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];
}
答案 0 :(得分:7)
数组访问器几乎是指针算术的语法糖。 a[b]
相当于b[a]
相当于*(a+b)
。
也就是说,使用index[array]
而不是array[index]
是完全可怕的,你永远不应该使用它。
答案 1 :(得分:6)
哇。这真的很时髦。这不是真正的二维数组。它的工作原理是因为c
是一个数组,并且C语言中有一个用于处理此
b[3]
与此相同
3[b]
因此,此代码会转换为一个循环,会增加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]];
}
由于b [4]不存在而被破坏,所以输出应该是字符串c的第3,第5,第6和第24个字符或
sco?
后跟一些随机字符或崩溃。
答案 2 :(得分:2)
不,在第一个语句中声明了两个变量:int a
和int b[]
。
a[b][c]
只是说c[b[a]]
的一种棘手的方式,这是因为数组的语法:b[0]
和0[b]
是等价的。
答案 3 :(得分:2)
int a,b[]={3,6,5,24};
声明两个变量,一个int a和一个int数组b
char c[]="This code is really easy?";
使用给定的字符串
声明一个char数组for(a=0;a<3[b]/3-3;a++)
在范围[0..4]中迭代a:
cout << a[b][c];
这会输出以下结果:
答案 4 :(得分:0)
代码中有一个简单的技巧。对于c编译器,a[3]
与3[a]
完全相同。
知道了这一点后,您的代码可以转化为更有意义的代码:
int a,b[]={3,6,5,24};
char c[]="This code is really easy?";
for(a=0;a<b[3]/3-3;a++)
{
cout<<c[b[a]];
}
答案 5 :(得分:0)
a&lt; 3 [b] / 3-3与写作相同
a&lt; B [3] / 3-3
和a [b]与b [a]相同,因为a是整数 sp b [a]是{3,6,5,24}
中的项目之一然后意味着[b] [c]是b [a] [c] 这是c [{3,6,5,24}]
答案 6 :(得分:0)
foo [bar]“扩展”为“*(foo + bar)”所以a[b]
实际上与b[a]
相同(因为加法是可交换的),意思是数组b。并且a[b][c]
与c[b[a]]
相同,即c中的第i个字符,其中i是b中的ath元素。
答案 7 :(得分:0)
好的 - 首先,让我们解决for循环问题。
当您撰写b[3]
时,这与*(b+3)
相同。 *(b+3)
也与*(3+b)
同等,可以写为3[b]
。这基本上可以改写,更可理解的是:
for(a=0; a < ((b[3]/3) - 3); a++)
由于b [3]是一个常数值(24),你可以看作:
for(a=0; a < ((24/3) - 3); a++)
或
for(a=0; a < (8 - 3); a++)
最后:
for(a=0; a < 5; a++)
在您的情况下,这将使a
从0-4迭代。然后输出a[b][c]
,可以将其重写为c [b [a]]。
但是,我没有看到它如何编译和正确运行,因为它正在访问c[b[4]]
- 并且b只有4个元素。正如所写,这是错误的。
答案 8 :(得分:0)
首先:'a'未初始化。我们假设它被初始化为0。
'3 [b] / 3-3'等于5.循环将使用'a'从0变为4。 ('3 [b]'是'b [3]')
在a == 4步'a [b]'(所以'b [a]')将超出界限('b'的界限为0..3),因此它具有未定义的行为。在我的电脑上有时会出现“分段故障”。在那之前它输出:“soc?”