c - 这段带有指针函数的代码是如何工作的?

标签 c

我有一项家庭作业要弄清楚这将打印出什么:

static const int *f(const int a[], int i) { return &a[i + 2]; }

int a[] = { 1, 2, 3, 4, 5, 6, 7 };
f(a, 1)[1]; //What this will return

我运行了程序并得到了 5,但至少不明白它是如何工作的。

函数f貌似是我的指针,但是我不明白下标1是干什么的。

有人可以深入地向我解释一下吗?

最佳答案

问题完全是关于指针算术/数组索引(它们彼此相关)。该功能会让您失望。

该函数返回数组元素在索引 i + 2 处的地址。您为 i 传递了 1,因此您得到了第四个元素的地址(回想一下,数组索引是从零开始的)。

接下来发生的是,您将结果用作数组的新原点,并从中选取第二个元素。第二个元素恰好是 5

Index : 0 1 2 3 4 5 6
        - - - - - - -
Value : 1 2 3 4 5 6 7
              ^
              |
       Return value of f(a, 1) is the new origin

关于c - 这段带有指针函数的代码是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21977922/

相关文章:

无法将 UNIX/Linux 程序编译为 32 位程序

c - 从原始数据和结构定义中获取所有结构字段

c - C : *source++, (*source)++, *(source)++ 中的差异

竞技编程: "Time exceeded error"

c - 填充 int 变量中的字节

C: GDB: 终端显示逐行搜索内置函数

c - 是否可以在 Android 中使用 sched_setaffinity 设置亲和性?

通过指针更改 C 中的字符串文字?

c - 命名和未命名信号量的用法

c - 在将指针作为参数的函数内操作指针值