gpt4 book ai didi

c - C 指针表示法中的这些数组发生了什么?

转载 作者:太空宇宙 更新时间:2023-11-04 00:32:41 25 4
gpt4 key购买 nike

我对指针数组有点困惑,我只是想确定我是对的。

当我写 int *arr 时,它只是一个指向 int 变量的指针,还不是数组。只是我初始化它(比如用 malloc)它变成了一个数组。到目前为止我说得对吗?

我还有另一个问题:(在学校里)给了一个小函数,它应该返回一个成绩数组,第一个单元格是平均数。函数是故意错误的:他们所做的是设置

int *grades = getAllGrades();

然后他们将平均“细胞”的指针减少了一个

*(grades - 1) = getAverage();
return *(grades - 1)

我知道这是错误的,因为返回值不是数组,我只是不知道如何解释。当我设置一个指针时,机器/编译器如何知道我只需要一个指针还是一个数组?

(如果我不清楚是因为我想问一些对我来说仍然模糊的事情,我深表歉意)

最佳答案

how does the machine/compiler know if I want just a pointer or an array?

它不会,而且永远不会。假设你

int *a = malloc(3 * sizeof(int));

您只分配了 12 个字节(假设 int 为 4)。但是 malloc 只看到 12。那是 1 个大对象还是很多小对象?它不知道。真正知道的只有你自己 ;)

现在谈谈你的具体例子,

int *grades = getAllGrades();

此时,如您所说,grades 是否指向一个数组无话可说。但是知道它指向一个数组,这才是重要的。或者,也许您知道它不指向数组。关键是您必须知道 getAllGrades 的作用,才能知道它返回的是数组还是指向 1 事物的指针。

*(grades - 1) = getAverage();
return *(grades - 1)

这不一定是错误的,但它看起来确实有点草图。如果它是一个数组,您会期望 grades[0] == *(grade + 0) 是第一个元素,所以 grades[-1] == *(grades - 1) 看起来应该在第一个元素之前。同样,这不一定是错误的;也许在 getAllGrades 中他们做了:

int* getAllGrades() {
int *grades = malloc(sizeof(int) * 10);
return grades + 1;
}

也就是说,他们以 1 的优势抢先启动。众所周知,这种情况会发生(查看 C 中的数值食谱),但这有点奇怪。

关于c - C 指针表示法中的这些数组发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7141877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com