C语言基础学习笔记(8):向函数传递数组

C语言基础学习笔记(8):向函数传递数组

图:达拉斯(Dallas)

Guderian出品

  1. C语言中不允许用变量来定义数组的长度。

  2. 一维数组在内存中占用的字节数 = 数组长度 x sizeof(基类型)

  3. 向函数传递一维数组,所传递的是数组的地址。因此,在函数中对形参进行修改,会使原来传入的数组发生变化。在调用函数时,应该使用不带下标的数组名作为函数实参(数组名就相当于数组的首地址)。

    如:int func(int a[], int n);

    注:通常不指定数组的长度,用另一个形参来制定数组的大小。

  4. 向函数传递二维数组,在声明函数的二维数组形参时,不能省略数组第二维的长度,必须知道列数才能正确计算a[i][j]在数组中相对于第一个元素的偏移位置。

    如:int func(int a[][M], int n);

    注:数组第二维的长度不可省略。

  5. 向函数传递一维数组示例:快速排序

    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
    #include <stdio.h>

    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

【更多C语言系列】

本文标题:C语言基础学习笔记(8):向函数传递数组

文章作者:G-SS-Hacker

发布时间:2020年02月19日 - 15:20:28

最后更新:2020年02月20日 - 18:10:50

原始链接:https://G-SS-Hacker.github.io/C语言基础学习笔记(8):向函数传递数组/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。