ngu*_*ung 3 c pointers pass-by-reference
首先,我声明一个a包含10个元素的数组.然后我调用函数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),所以它意味着"获取一个[0]的地址,添加一个元素,并访问结果指向的对象."
因此,a[1]在调用代码和array[1]被调用代码中具有相同的结果,即使一个以数组开始而另一个使用指针.两者都使用数组的第一个元素的地址,添加一个元素,并在结果地址访问该对象.