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

标签 c pointers pass-by-reference

首先,我声明了一个包含 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/

相关文章:

c - 使用 i++(或++i)真的是一个好习惯吗?

c++ - 是否强制要求短路逻辑运算符?以及评估顺序?

c++ - 使用自己的指针遍历数组元素

c - 传递专门定义为字符串的地址的段错误

c - 当我们将数组传递给函数时,复制是如何工作的?

c - SSE2 饱和算法

c - 在C中是否可以输入某种变量并同时将其与另一个变量进行比较?

c++ - 使用双指针创建树

c - XCode C 编译器给出了关于指向 const 整数值的整数指针的不同结果,为什么?

c++ - 传递 std::ifstream 以用作指针