C 编程新手,尝试创建一个交换两个变量值的 void 函数。当我希望交换两个整数变量的值时,以下函数可以很好地工作,例如 a = 11, b = 33 并调用函数 swap(&a, &b):
void swap(int *a, int *b) {
*a += *b;
*b = *a - *b;
*a -= *b;
}
但是,当我尝试使用数组的两个元素执行此操作时,例如 swap(&a[0], &a[2]) 无法正常工作。但它确实可以与以下功能一起使用:
void swap(int i, int j, int a[]) {
int h = a[i];
a[i] = a[j];
a[j] = h;
}
有谁知道为什么第一个适用于单个变量而不适用于数组元素?当然,我在这里缺少一个很好的解释。欢迎所有帮助,提前致谢!!
这是完整的程序:
#include <stdio.h>
#include <stdlib.h>
void swap(int *a, int *b) {
*a += *b;
*b = *a - *b;
*a -= *b;
}
void selectionSort(int a[], int len) {
int i, j, min;
for (i = 0; i < len; i++) {
min = i;
for (j = i+1; j < len; j++) {
if (a[j] < a[min]) {
min = j;
}
}
swap(&a[i], &a[min]);
}
}
int main(int argc, char * argv[]) {
int a[5] = {5, 4, 3, 2, 1};
int len = 5, i;
selectionSort(a, len);
for (i = 0; i < len; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
数组值的输出为 1 2 0 0。
最佳答案
让我猜一下——所有值都变成零?
如果a == b
,你的交换函数就会被破坏。尝试:
void swap(int *a, int *b) {
if (a != b)
{
*a += *b;
*b = *a - *b;
*a -= *b;
}
}
关于c - void swap(int *a, int *b) 不适用于数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26514886/