You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言30元素数组排序求助:调用SelectionSort函数遇语法错误

排查C语言选择排序函数调用的语法问题

嘿,好久没写C确实容易手生,我来帮你梳理下调用SelectionSort时最容易踩的语法坑,结合你的场景(30元素数组,valores原数组、valoresordenados排序后数组)来分析:

最常见的几个语法错误点

  • 函数未提前声明:C语言要求函数在调用前必须被声明或定义。如果你的SelectionSort函数写在main函数后面,一定要在main上方加声明,比如:

    void SelectionSort(int arr[], int size);
    

    不然编译器会报“implicit declaration of function 'SelectionSort'”这类错误。

  • 参数传递错误:调用函数时别画蛇添足!数组名本身就是指针,直接传就行,别加方括号:
    ❌ 错误写法:SelectionSort(valores[], 30);
    ✅ 正确写法:SelectionSort(valoresordenados, 30);
    另外要注意:如果想保留原数组valores,记得先把它的内容复制到valoresordenados再排序,不然原数组会被直接修改。

  • 目标数组定义错误:别把valoresordenados定义成单个变量!必须是和原数组同大小的数组:
    ❌ 错误写法:int valoresordenados;
    ✅ 正确写法:int valoresordenados[30];
    复制数组可以用循环或者memcpy(需要包含<string.h>头文件):

    memcpy(valoresordenados, valores, sizeof(valores));
    
  • 函数实现与声明不匹配:比如声明的函数参数是int arr[],但实现时参数类型、数量不对,或者返回值不匹配(比如声明是void,实现却返回了int),都会触发编译错误。

给你一个可参考的完整示例

#include <stdio.h>
#include <string.h>

// 提前声明选择排序函数
void SelectionSort(int arr[], int size);

int main() {
    // 示例初始化原数组(你可以替换成自己的30个元素)
    int valores[30] = {23, 5, 17, 31, 8, 12, 45, 9, 3, 19,
                       27, 33, 1, 7, 14, 21, 37, 4, 10, 25,
                       30, 35, 6, 11, 16, 20, 24, 29, 32, 36};
    int valoresordenados[30];
    
    // 复制原数组到目标数组,避免修改原数据
    memcpy(valoresordenados, valores, sizeof(valores));
    
    // 正确调用排序函数
    SelectionSort(valoresordenados, 30);
    
    // 打印排序后的结果验证
    printf("排序后的值:\n");
    for (int i = 0; i < 30; i++) {
        printf("%d ", valoresordenados[i]);
        if ((i+1) % 6 == 0) printf("\n"); // 每6个换行,方便查看
    }
    
    return 0;
}

// 选择排序的实现
void SelectionSort(int arr[], int size) {
    for (int i = 0; i < size - 1; i++) {
        int min_idx = i;
        // 找到未排序部分的最小值索引
        for (int j = i + 1; j < size; j++) {
            if (arr[j] < arr[min_idx]) {
                min_idx = j;
            }
        }
        // 交换最小值和当前位置的元素
        int temp = arr[min_idx];
        arr[min_idx] = arr[i];
        arr[i] = temp;
    }
}

如果还有具体的编译错误提示,把错误信息贴出来,我能更精准地帮你定位问题!

内容的提问来源于stack exchange,提问作者user6100041

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:12:52