我正在尝试编写一个在c中采用可变大小数组的函数.
void sort(int s,int e,int arr[*]){ ... }
它表示对于可变长度数组,它需要在函数声明中有界.那是什么意思?我正在使用xcode 4.0,使用LLVM编译器2.0.
谢谢您的帮助.
解决方法
如果您没有使用C99可变长度数组,通常的解决方案是传入指向第一个元素的指针,以及要用于访问元素的任何索引.
这是一段打印出一系列数组的代码,类似于您尝试对其进行排序的代码.
#include <stdio.h> static void fn (int *arr,size_t start,size_t end) { size_t idx; for (idx = start; idx <= end; idx++) { printf ("%d ",arr[idx]); } putchar ('\n'); } int main (void) { int my_array[] = {9,8,7,6,5,4,3,2,1,0}; fn (my_array,6); return 0; }
这将输出4到6个元素(从零开始),给出:
5 4 3
有几点需要注意.
>在该函数中使用my_array调用fn会自动将数组“衰减”为指向其第一个元素的指针.当您使用数组时,这实际上发生在大多数(并非所有)情况下,因此您不必显式声明&(my_array [0]).> C已经在标准库中内置了一个非常好的排序函数,称为qsort.在许多情况下,这就是你应该使用的东西(除非你有一个特定的算法要用于排序,或者你正在做家庭作业/自学教育).