C 为什么原始数组也被排序?
我不明白为什么在调用排序函数后对原始数组进行排序,即使我使用了备用数组。 为了避免这个问题,我首先复制了所有元素。 欢迎作出任何澄清。谢谢C 为什么原始数组也被排序?,c,arrays,C,Arrays,我不明白为什么在调用排序函数后对原始数组进行排序,即使我使用了备用数组。 为了避免这个问题,我首先复制了所有元素。 欢迎作出任何澄清。谢谢 #include <stdio.h> void array_sort(int* t, int n) { int min, index; int* p; for (int i = 0; i < n; i++) { //to avoid changing the original array *(p +
#include <stdio.h>
void array_sort(int* t, int n)
{
int min, index;
int* p;
for (int i = 0; i < n; i++) { //to avoid changing the original array
*(p + i) = *(t + i);
}
for (int i = 0; i < n - 1; i++) {
min = *(p + i);
index = i;
for (int j = i + 1; j < n; j++) {
if (*(p + j) < min) {
min = *(p + j);
index = j;
}
}
*(p + index) = *(p + i);
*(p + i) = min;
}
for (int i = 0; i < n; i++)
printf("%i\t", *(p + i));
}
int main(void)
{
printf("Enter number of elements to be sorted : ");
int n;
scanf("%i", &n);
printf("\nEnter the numbers : ");
int p[n];
for (int i = 0; i < n; i++) {
scanf("%i", p + i);
}
array_sort(p, n);
printf("\n");
for (int i = 0; i < n; i++) { //check if original array is unsorted
printf("%i\t", *(p + i));
}
return 0;
}
#包括
无效数组_排序(int*t,int n)
{
int-min,索引;
int*p;
用于(int i=0;i
程序的行为将产生未定义的行为。原因是在数组_排序函数中使用了未初始化的指针p。由于指针p未初始化,array_sort函数将在一些随机内存中复制数组
大多数情况下,此程序会导致分段错误。
int*p;对于(inti=0;i
,这显然是未定义的行为,不会达到预期效果。可能替换int*p代码>=>int p[n]
?这个问题的“排序”部分不是很相关。您可能希望缩小它的范围,以便只询问如何制作数组的副本。您从未在array\u sort
中分配第二个数组。否int*p
分配一个未初始化的指针,该指针不指向任何特定的对象。如果希望它指向某个内存,则必须对其进行初始化,方法是使其指向某个现有内存,或者使用malloc()
动态分配要使用的内存。完成后别忘了释放内存。你(不)幸运的是,你的代码运行并排序了原始数组,而不是崩溃。@Lamriniyunes读了一本C的书,写C是必须的。int*p
,只需声明一个名为p
的int
指针,他的值是不确定的,尊重它是不确定的行为。