问题是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
的元素是通过指向数组第一个元素的指针通过引用传递的。使用指针算术,函数可以直接访问传递给函数的原始数组的每个元素。