我有一项家庭作业要弄清楚这将打印出什么:
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/