2017-03-08 85 views
-4
#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中。所以我用整數來代替。什麼原因和操作數組的作爲函數參數的正確方法是什麼?當使用數組作爲參數時,如何獲取C中的數組參數的長度

回答

2

您不能在函數內部獲取數組大小。

你所做的是將尺寸作爲另一個參數傳遞。

void insertion_sort(int arr[], int size) 
2

從函數內部找不到數組的大小。在調用中,數組會衰減爲指向第一個元素的指針,顯然,指針沒有關於元素數量指向多少數據的概念。

這就是C的工作原理。

您應該添加第二個參數來指示長度,並使其具有類型size_t,因爲該類型表明我們正在討論大小。

參見,例如,標準庫的qsort()功能:

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

基本上basenmemb描述的陣列。