C语言 在数组中使用指针的问题



我是C的新手,有一个指针的问题。我一直无法在网上或通过我的同行找到答案,所以我在这里。

我的任务是:

  • 创建20个随机整数的数组
  • 打印出整数
  • 按升序排序
  • 再打印一遍

当我用GCC编译程序并运行时,我得到一个分段错误。我已经将其缩小到当我尝试在sort函数中设置number[i]number[k]的值时发生的情况。如有任何帮助,不胜感激。

#include <stdio.h>
void sort(int* number, int n){
     /*Sort the given array number , of length n*/
    int temp, min;
    int i, k;
    for(i=0; i<n; i++){
        min = i;
        for(k=i+1; k<n; k++){
            if(number[k]<min){
                min = k;
            }
        }
        temp = number[i];
        number[i] = number[k];
        number[k] = temp;
    }   
}
int main(){
    /*Declare an integer n and assign it a value of 20.*/
    int n=20;
    /*Allocate memory for an array of n integers using malloc.*/
    int *array = malloc(n * sizeof(array));
    /*Fill this array with random numbers, using rand().*/
    srand(time(NULL));
    int i;
    for(i=0; i<n; i++){
        array[i] = rand()%1000+1;
    }
    /*Print the contents of the array.*/
    for(i=0; i<n; i++){
        printf("%dn", array[i]);
    }
    /*Pass this array along with n to the sort() function of part a.*/
    sort(&array, 20);
    /*Print the contents of the array.*/
    printf("n");
    for(i=0; i<n; i++){
        printf("%dn", array[i]);
    }
    return 0;
}
以下是我得到的编译错误:

Q3.c: In function:

Q3.c:31: warning:函数的隐式声明

Q3.c:31: warning:不兼容的内置隐式声明函数amalloca

Q3.c:34: warning:函数的隐式声明

Q3.c:34: warning:隐式声明函数 time

Q3.c:37: warning:函数的隐式声明

Q3.c:46:警告:传递的参数1是不兼容的指针类型

Q3.c:9:注意:期望的是 int * 类型,但实参是 int ** 类型

在交换元素时,

temp = number[i];
number[i] = number[k];
number[k] = temp;

k == n,因为它在

结尾之后
for(k=i+1; k<n; k++){

您的意思是使用min而不是k交换

main

int *array = malloc(n * sizeof(array));

为指向intn指针分配了足够的空间,而不是为20个int分配空间。应该是

int *array = malloc(n * sizeof *array);

关于编译器警告/错误,

#include <stdlib.h>

sort(array, 20);

而不是传递&array .

arrayint*,您的sort函数期望int*,但您传递了&array, int指针的地址

相关内容

  • 没有找到相关文章

最新更新