像arr [''hi there"]这样的表达意味着什么?

sun*_*sun 15 c arrays

如果a = 3且b = 5,这意味着什么?

printf(&a["Ya!Hello! how is this? %s\n"], &b["junk/super"]);
Run Code Online (Sandbox Code Playgroud)

我知道这arr[4]意味着*(arr+4)所以我需要知道表达式"hi there"意味着什么?

编辑 - 问题可能更清晰:

当一个字符串用作数组下标时它传达了什么值?

为什么输出上面Hello! how is this? super

Naw*_*waz 22

这意味着,printf等同于:

printf("Hello! how is this? %s\n", "super");
Run Code Online (Sandbox Code Playgroud)

将打印:

Hello! how is this? super
Run Code Online (Sandbox Code Playgroud)

在线演示:http://ideone.com/PVzUP

说明:

当我们写char s[]="nawaz;,然后s[2]意味着字符串中的第三个字符s.我们可以通过书面形式表达这"nawaz"[2]也意味着字符串中的第3个字符"nawaz".我们也可以写2["nawaz"]字符串中的第3个字符.在您的代码中,printf使用最后一种形式,即形式2["nawaz"].但它很不寻常.

所以a["Ya!Hello! how is this? %s\n"]意味着字符串中的第4个字符(作为a3 的值),如果你添加&infront,a那么&a["Ya!Hello! how is this? %s\n"]返回字符串中第4个字符的地址,这意味着,在printf中它变成等效于:

Hello! how is this? %s\n
Run Code Online (Sandbox Code Playgroud)

我希望你能自己解释其余的.

  • 我仍然对"喜那里"的问题感到困惑......: (2认同)

Gre*_*ill 11

如果arr[4]是手段*(arr+4),则4[arr]意味着*(4+arr).由于指针和整数之间的加法是可交换的,因此它们是相同的.

如果您使用具有重载运算符的对象在C++中工作,答案可能会非常不同.在这种情况下,您的问题不够完整.

  • @Sidyll - 我认为这是问题的答案. (3认同)
  • 我不认为这是个问题...... (2认同)
  • @sidyll,这正是问题所在.将`4`替换为'a`或`b`,灯泡应该点击. (2认同)

tom*_*asz 5

如果是ab整数,这两行是等价的:

printf(&a["Ya!Hello! how is this? %s\n"], &b["junk/super"]);
printf(&("Ya!Hello! how is this? %s\n"[a]), &("junk/super"[b]));  
Run Code Online (Sandbox Code Playgroud)

这是一个有趣的读物:http://www.gotw.ca/gotw/086.htm