c-为什么数组在按值传递模式下与其他函数排序



问题是x数组在传递值模式中与其他函数正确排序

根据我的理解,在按值传递模式下,数组不能从其他函数中排序,只有当我通过引用传递时,它才会排序,而BubbleSort参数它们只是原始变量的副本,所以当函数完成时,复制变量不会影响主函数中的原始变量,请解释原因,谢谢。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
void BubbleSort(int a[])
{
int temp=0;
for(int i=0;i<10-1;i++)
{
for(int j=0;j<10-1;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
int main()
{
int x[11]={7,6,4,5,8,11,14,37,2,9};
BubbleSort(x);
for(int i=0;i<10;i++)
{
printf("%dn",x[i]);
}
}

数组没有赋值运算符。

在此函数中调用

BubbleSort(x);

具有数组类型的参数表达式被隐式转换为指向其第一个元素的指针。

另一方面,具有数组类型的函数参数由编译器隐式调整为指向数组元素类型。

因此,此功能声明

void BubbleSort(int a[]);

由编译器根据声明进行调整

void BubbleSort(int *a);

因此,实际上,在main中声明的数组x的元素是通过指向数组第一个元素的指针通过引用传递的。使用指针算术,函数可以直接访问传递给函数的原始数组的每个元素。

最新更新