jak*_*992 3 c arrays swap pointers
C编程的新手,以及尝试创建一个void函数来交换两个变量的值.当我希望交换两个整数变量的值时,以下函数可以正常工作,假设a = 11,b = 33,函数调用swap(&a,&b):
void swap(int *a, int *b) {
*a += *b;
*b = *a - *b;
*a -= *b;
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用数组的两个元素执行此操作时,它对交换(&a [0],&a [2])无法正常工作.但它确实可以使用以下功能:
void swap(int i, int j, int a[]) {
int h = a[i];
a[i] = a[j];
a[j] = h;
}
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么第一个单变量工作而不是数组元素?当然有一个非常好的解释,我在这里失踪.欢迎所有帮助,谢谢!
这是完整的程序:
#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;
}
Run Code Online (Sandbox Code Playgroud)
数组值的输出为1 2 0 0.
让我猜 - 所有的值都转为零?
如果你的交换功能坏了a == b.尝试:
void swap(int *a, int *b) {
if (a != b)
{
*a += *b;
*b = *a - *b;
*a -= *b;
}
}
Run Code Online (Sandbox Code Playgroud)