gpt4 book ai didi

c - 想知道这些是如何工作的(C 中的交换函数和排序函数)

转载 作者:行者123 更新时间:2023-12-04 10:11:25 25 4
gpt4 key购买 nike

我是 C 的新手,我想了解这两个函数:

交换功能:

void swap(int a, int b) {
int temp=a;
a=b;
b=temp;

printf("In swap\n");
printf("a: %d\n", a);
printf("b: %d\n", b);
}

用法:

int a=5, b=7;
swap(a, b);

排序函数:

void sort(int values[], int n)
{
for (int i=1; i < n; i++) {
int element=values[i];
int j=i;
while ((j > 0) && (values[j-1] > element)) {
values[j]=values[j - 1];
j--;
values[j]=element;
}
}
return;
}

用法:

int array={9, 1, 8, 5, 3, 2, 5};
int size=7;
sort(array, size);

我的问题是,为什么交换函数没有返回交换值?如果传递给交换函数的值采用不同的地址(我猜)以便函数外部的值不被交换,那么为什么排序函数返回排序后的数组?这是否意味着传递给排序函数的数组中的值具有相同的地址?

最佳答案

正如您已经了解的那样,C 具有“按值调用”,因此发送到交换函数的是原始值的副本,并且只是那些被交换的副本。

C 中的数组有点特殊。在大多数情况下,当您在 C 程序中编写数组的名称时,它会转换为指向其第一个元素的指针。因此,当您(尝试)将数组传递给函数时,实际发送给函数的是指向第一个元素的指针,因此排序函数中的任何更改都将在原始副本上完成。

关于c - 想知道这些是如何工作的(C 中的交换函数和排序函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26688846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com