C语言基础学习笔记(8):向函数传递数组
图:达拉斯(Dallas)
Guderian出品
C
语言中不允许用变量来定义数组的长度。一维数组在内存中占用的字节数 = 数组长度 x
sizeof(基类型)
。向函数传递一维数组,所传递的是数组的地址。因此,在函数中对形参进行修改,会使原来传入的数组发生变化。在调用函数时,应该使用不带下标的数组名作为函数实参(数组名就相当于数组的首地址)。
如:
int func(int a[], int n);
注:通常不指定数组的长度,用另一个形参来制定数组的大小。
向函数传递二维数组,在声明函数的二维数组形参时,不能省略数组第二维的长度,必须知道列数才能正确计算
a[i][j]
在数组中相对于第一个元素的偏移位置。如:
int func(int a[][M], int n);
注:数组第二维的长度不可省略。
向函数传递一维数组示例:快速排序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
const int N = 10;
void swap(int *x, int *y);
void QuickSort(int arr[], int low, int high);
int main()
{
int a[N] = {1,2,3,9,8,6,5,0,4,7};
QuickSort(a, 0, N);
for(int i = 0; i < N; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}
void swap(int *x, int *y)
{
int tmp = *x;
*x = *y;
*y = tmp;
}
void QuickSort(int arr[], int low, int high)
{
if (low >= high)
return ;
int mid = arr[high];
int left = low, right = high - 1;
while(left < right)
{
while(arr[left] < mid && left < right)
left++;
while(arr[right] >= mid && left < right)
right--;
swap(&arr[left], &arr[right]);
}
left += (arr[left] < arr[high]);
swap(&arr[left], &arr[high]);
QuickSort(arr, low, left-1);
QuickSort(arr, left+1, high);
}输出结果为:
1
0 1 2 3 4 5 6 7 8 9