2017-03-08 3 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内にあります。だから私は代わりに整数を使いました。どのような理由があり、関数のパラメータとして取られた配列を操作する適切な方法は何ですか?配列をパラメータとして使用する場合、配列の長さを取得するにはどうすればよいですか?

答えて

2

関数内で配列サイズを取得することはできません。

代わりに、別のパラメータとしてサイズを渡します。

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

機能の中から配列のサイズを見つけることができません。呼び出しでは、配列は最初の要素へのポインタに崩壊し、ポインタには要素数の点でどれだけのデータがポイントしているかという概念はありません。

これはCの動作方法です。

長さを示すために2番目の引数を追加し、その型がになるようにする必要があります。

参照は、例えば、標準ライブラリのqsort()機能:

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

基本的にbasenmemb配列について説明します。

関連する問題