所以我需要将数组传递给函数sort并对它进行排序,它在外面工作但不能让它在函数内部工作。需要传递指针只是不确定如何。
#include <stdio.h>
void sort(int *number, int n) {
/* Sort the given array number, of length n */
int temp = 0, j, i;
for (i = 1; i < n; i++) {
for (j = 0; j < n - i; j++) {
if (number[j] > number[j + 1]) {
temp = number[j];
number[j] = number[j + 1];
number[j + 1] = temp;
}
}
}
}
int main() {
int n = 20;
int *ptr = malloc(n * sizeof *ptr);
int i = 0;
while (i < n) {
ptr[i] = rand() % 100;
i++;
}
int j = 0;
while (j < n) {
printf("%d , ", ptr[j]);
j++;
}
void sort(ptr, n);
printf("\n");
int x = 0;
while (x < n) {
printf("%d , ", ptr[x]);
x++;
}
}
答案 0 :(得分:5)
void sort(ptr, n);
应为sort(ptr, n);
我可能错了,但我相信C编译器,第一种形式被解释为函数原型,第二种形式被解释为实际的函数调用。
答案 1 :(得分:1)
首先,当我编译时,我得到两个编译器警告。永远不要忽略编译器警告。实际上,在这种情况下,编译器警告之一恰好发生在代码中被破坏的行上。通常使用-Wall
进行编译。
接下来,在调试器中运行它。例如,使用-g
进行编译并使用gdb
。你可以谷歌一个备忘单,了解如何轻松地开始使用gdb。在程序中逐行观察正在发生的事情,您将知道错误是什么。在这种特殊情况下,您会发现跳过调用函数的行。这条线已经被报告了一个警告,所以如果它的功能出乎意料的话应该不足为奇。
答案 2 :(得分:0)
这段代码使用指针对数组进行排序。希望它有所帮助
//@author Abdul-Razak Adam
#include <stdio.h>
#include <stdlib.h>
void fillArray(int * array, int size);
void printArrayValue(int * array, int size);
int getIndexOfMin(int * array, int size);
void removeAnIndexFromArray(int* array, int size, int index);
int* sortArray(int* array, int size);
//test
int main (void){
int* SIZE; //size
int * array;
SIZE = (int*) malloc(sizeof(int));
scanf("%d", SIZE);
//printf("%i\n", *SIZE);
int size = *SIZE;
array = (int*) malloc (size * sizeof(int));
fillArray(array,size);
printArrayValue(array,size);
printf("..............................................\n");
printf("Array Sorted\n");
printf("..............................................\n");
array = sortArray(array,size); //get pointer to sorted array
printArrayValue(array,*SIZE);
//free memory
free(array);
free(SIZE);
}
//fill array with random values
void fillArray(int* array, int size){
int i = 0;
for (i = 0; i < size; i++){
*(array + i) = rand()%100;
}
}
//print value from array
void printArrayValue(int* array, int size){
int i = 0;
for (i = 0; i < size; i++){
printf("%i , ", *(array+i));
}
printf("\n");
}
//sort value of array
int* sortArray(int* array, int size){
int min = *array;
int originalSize = size;
int * temp;
temp = (int* )malloc(sizeof(int) * size);
int i = 0;
int index;
while(size > 0){
index = getIndexOfMin(array,size);
temp[i++] = array[index];
removeAnIndexFromArray(array, size --,index);
}
return temp;
}
//get the index of the minimum value in the array
int getIndexOfMin(int * array, int size){
int min = *array;
int i = 0 ;
int index = 0;
for (i = 0 ; i < size; i++){
if (min > *(array+i)){
min = *(array+i);
index = i;
}
}
return index;
}
//remove the minimum value from the array
void removeAnIndexFromArray(int* array, int size, int index){
*(array + index) = 0;
if (index != (size-1)){
int i = index;
for (i = index; i < (size -1); i++){
*(array + i) = *(array + (i+1));
}
}
}