C语言30元素数组排序求助:调用SelectionSort函数遇语法错误
嘿,好久没写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

