有没有人能帮我理解一下以下代码:
int d = 4;
printf(&d["Hay!Hello %c\n"], &4["BuddyWorld"]); // Hello (some address in char)
printf(&d["Hay!Hello %c\n"], 4["BuddyWorld"]); // Hello y
printf(&d["Hay!Hello %s\n"], 4["BuddyWorld"]); // Segmentation fault
printf(&d["Hay!Hello %s\n"], &4["BuddyWorld"]); // Hello yWorld
printf("d[Hay!Hello %s\n"], &4["BuddyWorld"]);
/* warning: passing argument 1 of 'printf' makes pointer
from integer without a cast */d[]或&d[]操作符到底是什么?(d是整数)为什么&4["BuddyWorld"]和4[BuddyWorld]会产生不同的值?(分别为“W”和“y”)
发布于 2012-10-22 23:04:33
C语言中的下标很奇怪。将a[b]转换为*(a + b) (通过将b添加到指针a而获得的地址处的内容)。然而,自a + b == b + a以来,它也以另一种方式工作(a[b] == b[a])。这就是正在发生的一切。特别是,"HelloWorld“实际上是一个指向存储字符串字符的字符数组的指针。
发布于 2012-10-22 23:05:36
当您编写像a[i]这样的代码时,它会扩展为*(a + i)。(我们说a[i]是*(a + i)的语法糖)。
加法是可交换的,所以"BuddyWorld"[4] = *("BuddyWorld" + 4) = *(4 + "BuddyWorld") = 4["BuddyWorld"],其中"BuddyWorld"隐式地表示它在内存中的地址。
发布于 2012-10-22 23:05:05
d["Hay!Hello %c\n"]与"Hay!Hello %c\n"[d]相同。
&运算符给出所指向内容的地址
https://stackoverflow.com/questions/13014193
复制相似问题