c/c++配列長を求める

4213 ワード

c++には配列の長さを求めるデフォルト関数がなく、自分で書くしかありません
配列の長さを求めます:int ArrayLength = sizeof(array) / sizeof(array[0]);
  • は使いやすいため、c言語の中でマクロを定義して配列の長さを求めます:#define ARR_LEN(array, length){length = sizeof(array) / sizeof(array[0];}使用する時、直接関数を呼び出すことができます:
  • int len, arr[] = {3, 1, 4};  
    ARR_LEN(are, len); // len      3
    
  • c++でテンプレート関数を定義することもできます:
  • template<class T>
    
    int GetArrLen(T &array) {
    
        return sizeof(array) / sizeof(array[0]);
    
    }
    

    使用時にテンプレート関数を呼び出します.
    int arr[] = {3, 1, 4};
    
    int len = GetArrLen(arr); // len     3
    

    しかし
    配列が関数に伝達されると、ポインタが伝達され、ポインタは配列ヘッダarr[0]のみを指し、長さ情報は一切ないので、配列に伝達されると、配列長を同時に関数に伝達します.
    void length_array(int arr[]){ 
    
    	int len = getArrayLen(arr);
    
    	cout << "len = " << len << ", sizeof(arr) = " << sizeof(arr) << endl;
    
    }
    
    len = 1, sizeof(arr) = 4 ;
    これは、配列をパラメータとして関数に渡すと、この配列はポインタint *arrに劣化するからである.