gpt4 book ai didi

c - 在 C 中使用指针将数组传递给函数?

转载 作者:太空狗 更新时间:2023-10-29 15:52:42 28 4
gpt4 key购买 nike

首先,我声明了一个包含 10 个元素的数组 a。然后我调用函数 bubbleSort bubbleSort(a, 10);其中 bubbleSort 是声明为的函数void bubbleSort(int* const array, const int size)

我的问题是,如果“数组”是一个指针——这意味着它存储了数组a (array= &a [0]) 的地址,那么我们如何理解这些术语 array[1], array[2], array[3]... 在函数 bubbleSort?

这是冒泡排序程序,这部分让我很困惑。

最佳答案

array[1] 表示,根据 C 标准中的定义,*(array+1)。因此,如果 array 是指针,则此表达式将一个元素添加到指针,然后使用结果访问指向的对象。

a是数组时,你可能习惯认为a[0], a[1], a[2]等作为数组的元素。但他们实际上经历了与上面的指针相同的过程,多了一个步骤。当编译器发现 a[1] 并且 a 是一个数组时,编译器首先将该数组转换为指向其第一个元素的指针。这是C标准中的一条规则。所以a[1]实际上是(&a[0])[1]。那么上面的定义适用:(&a[0])[1]*(&a[0] + 1),所以它的意思是“取a[的地址0],添加一个元素,访问结果指向的对象。”

因此,调用代码中的 a[1] 和被调用代码中的 array[1] 具有相同的结果,即使一个以数组开头并且其他使用指针。两者都使用数组第一个元素的地址,添加一个元素,并在结果地址访问对象。

关于c - 在 C 中使用指针将数组传递给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16390972/

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