使用数组作为参数时,如何在C中获取该数组参数的长度

时间:2017-03-08 12:43:29

标签: c arrays

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

void insertion_sort(int arr[]);

void insertion_sort(int arr[]) {

    int hold;
    int key;

    for (int i = 2; i < 7; i++) {
        key = arr[i];
        hold = i- 1;
        while (hold >= 0 && arr[hold] > key) {
            arr[hold + 1] = arr[hold];
            hold--;
        }
        arr[hold + 1] = key;
    }

}


int main() {


    int arr[] = {3,4,5,6,7,1,4};

    insertion_sort(arr);

    for (int i = 0; i < sizeof(arr) / sizeof(int); i++) {
        printf("%d", arr[i]);
    }

    return 0;
}

似乎我不能使用[sizeof(arr)/ sizeof(int)]来获取insertion_sort中数组的长度。所以我用了整数。是什么原因以及操作数组作为函数参数的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

您无法在函数内获取数组大小。

您要做的是将大小作为另一个参数传递。

void insertion_sort(int arr[], int size)

答案 1 :(得分:2)

您无法从函数内部找到数组的大小。在调用中,数组衰减成指向第一个元素的指针,显然指针没有根据元素数量指出它指向多少数据的概念。

这就是C的工作方式。

您应该添加第二个参数来指示长度,并使其具有类型size_t,因为该类型表示我们正在讨论大小。

例如,请参阅标准库的qsort()函数:

  

void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));

基本上basenmemb描述了一个数组。