我想知道为什么这不一样(函数定义在 outside-main 和 if inside-main 函数中)
I want to know why this don't work the same(function definition outside-main and if inside-main function)
#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
函数,因此当您 return 时,任何更改都将丢失。您可能想传递指针:
void sort(int *x, int *y) {
if (*x > *y) {
int temp;
temp = *y;
*y = *x;
*x = temp;
}
}
这将导致更改原始值,而不仅仅是本地副本。
#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
函数,因此当您 return 时,任何更改都将丢失。您可能想传递指针:
void sort(int *x, int *y) {
if (*x > *y) {
int temp;
temp = *y;
*y = *x;
*x = temp;
}
}
这将导致更改原始值,而不仅仅是本地副本。