如果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个字符(作为a
3 的值),如果你添加&
infront,a
那么&a["Ya!Hello! how is this? %s\n"]
返回字符串中第4个字符的地址,这意味着,在printf中它变成等效于:
Hello! how is this? %s\n
Run Code Online (Sandbox Code Playgroud)
我希望你能自己解释其余的.
Gre*_*ill 11
如果arr[4]
是手段*(arr+4)
,则4[arr]
意味着*(4+arr)
.由于指针和整数之间的加法是可交换的,因此它们是相同的.
如果您使用具有重载运算符的对象在C++中工作,答案可能会非常不同.在这种情况下,您的问题不够完整.
如果是a
和b
整数,这两行是等价的:
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