c - &(p[*(i + j)]) 到底是做什么的?

标签 c

运行以下代码将打印出orld。这里发生了什么? &(p[*(i + j)]) 究竟做了什么?

#include <stdio.h>
char p[] = "HelloWorld";
int i[] = {2,1,3,5,6}, j = 4;

int main()
{
    printf(&(p[*(i + j)]));
    return 0;
}

最佳答案

char p[] = "HelloWorld";
int i[] = {2,1,3,5,6}, j = 4;

&(p[*(i + j)]) 计算如下:

这里的i数组i基地址。因此,i+4 将是 数组 i第五个元素地址*(i+j) 将等于 6P[6] 将在 W 之后为 o&(p[*(i + j)])等于&p[6]。因此,在 printf 中,您传递的是 o 的地址输出 将是 orld

关于c - &(p[*(i + j)]) 到底是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22301065/

相关文章:

c++ - 缩放后重新定位矩形

c - 如何使用ffmpeg降低视频的分辨率?

将 int 变量的最后 n 位设置为零的 C 表达式

c++ - 序列号 : write() throttling?

c - 结构的 `alignof` 是否总是其成分的最大值 `alignof`?

c - 为什么这会在一个系统上给我带来段错误,而在另一个系统上却不会?

c - 我正在尝试使用fork编写C程序

c - 使程序直接运行,而无需使用终端来运行它

c++ - Python Ctypes 崩溃调用 C++ 函数的 C 包装器

c - 没有 "inline"或 "static"的 "extern"在 C99 中有用吗?