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

时间:2010-02-03 00:35:42

标签: 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];
}

9 个答案:

答案 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 aint 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:

  • 3 [b]是另一种说b [3]的方式,即24。
  • 24/3 = 8
  • 8 - 3 = 5

cout << a[b][c];

这会输出以下结果:

  • a [b]相当于b [a],其为b [0..4]
  • b [0..4] [c]是另一种说法c [b [0..4]]

答案 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)

在C中,

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?”