问题描述
#include <stdio.h>
int generator(int n) {
int ten[6]; // array that saves digit number
int result = n;
for (int i = 0; i < 6; i++) {
ten[i] = n % 10; //saving digit number
n = n / 10;
result += ten[i];
}
return result;
}
void sort(int x,int y) { //the problem function. it didn't work
if (x > y) {
int temp;
temp = y;
y = x;
x = temp;
}
int main(void) {
int number[10000];
int selfNumber[10000];
int result[10000];
for (int i = 0; i < 100; i++) {
number[i] = generator(i+1); //generator function
}
for (int i = 0; i < 100; i++) {
printf("%d\n",number[i]);
}
for (int i = 0; i < 100; i++) {
if (number[i] > number[i + 1]) { //it worked.
int temp;
temp = number[i + 1];
number[i+1] = number[i];
number[i]=temp;
}
sort(number[i],number[i + 1]);
}
for (int i = 0; i < 100; i++) {
printf("%d\n",number[i]);
}
return 0;
我定义了 void 函数 sort 来按大小对数字进行排序。但它没有用。 所以,我在 main 函数中使用了 if 来按大小对数字进行排序。 我不知道为什么它的工作方式有所不同。
解决方法
您的 sort
函数按值接受参数(按值传递),即它使用您传递给它的数字的副本。 sort
交换复制成功,但这不是您期望的行为。
当需要传递引用语义时使用指针(或 C++ 中的引用):
void sort(int* x,int* y) {
if (*x > *y) {
int temp = *y;
*y = *x;
*x = temp;
}
}
阅读有关指针 here 的更多信息。
,您将 x & y 按值传递给 sort
函数,因此当您返回时,任何更改都会丢失。您可能希望改为传递指针:
void sort(int *x,int *y) {
if (*x > *y) {
int temp;
temp = *y;
*y = *x;
*x = temp;
}
}
这将导致更改原始值,而不仅仅是本地副本。