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