2

私はこのように多次元配列を作成するライブラリを使用しています:

const unsigned short arrayA[5] = {1, 2, 3, 4, 5};
const unsigned short arrayB[3] = {7, 8, 9};

const unsigned short *multiArray[] ={arrayA, arrayB};

私はそれの値を取得し、それは機能します:

printf("03: %d\n", multiArray[0][3]); //4
printf("12: %d\n", multiArray[1][2]); //9

問題は、いずれかの配列のサイズを取得する必要がある場合に発生します。これを試しました。

printf("Size of first array: %ld \n", sizeof(multiArray[0])/sizeof(multiArray[0][0]));

おそらくアドレスを使用しているため、2を返します。

では、どうすれば配列のサイズを取得できますか?

配列の宣言方法を変更しないようにこれを行う必要があるため、配列はすでに存在し、サイズを取得する必要があります。

何かアプローチはありますか?

4

6 に答える 6

4

2つの配列(arrayAとarrayB)は任意の場所に格納されるため、計算を実行する方法がないため、multiArrayのポインターが指す配列のサイズを推測することはできません。配列のサイズを保存することをお勧めします。

于 2013-02-13T09:51:04.510 に答える
2

ポインタを使用する場合sizeofは、実際のポインタのサイズを取得しますが、それが指すサイズは取得しません。含まれている配列のサイズを他の方法で追跡する必要があります。

于 2013-02-13T09:47:53.563 に答える
2

できません。配列のサイズを事前に知って、それを追加の引数として渡す必要があります。

于 2013-02-13T09:43:57.890 に答える
2

行列の行と列の両方の量を取得することが可能です。

int main(void) {
     int row;
     int column;
     int matrix[4][5]={{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5}};

     row=sizeof(matrix)/sizeof(matrix[0]); 
     column=sizeof(matrix[0])/row;

     printf("row %i \n",row);
     printf("column %i \n",column);
     return 0;
}
于 2014-08-16T04:09:52.057 に答える
1

できません!このデータを保持し、必要な場所に渡す必要があります。

ところで、これを行うとき:sizeof(multiArray[0])/sizeof(multiArray[0][0])
基本的sizeof(<pointer>)/sizeof(<unsigned short>)に特定のマシンで=>2を実行します。

于 2013-02-13T09:56:52.673 に答える
1

他の人が言ったように、あなたはできません、代わりにあなたはあなた自身のタイプを作ることができます:

#include <stdio.h>

struct cont {
    const unsigned short *value;
    size_t len;
};

int main(void)
{
    const unsigned short arrayA[5] = {1, 2, 3, 4, 5};
    const unsigned short arrayB[3] = {7, 8, 9};

    struct cont arrays[] = {
        {arrayA, sizeof(arrayA) / sizeof(arrayA[0])},
        {arrayB, sizeof(arrayB) / sizeof(arrayB[0])},
    };

    printf("03: %d\n", arrays[0].value[3]);
    printf("12: %d\n", arrays[1].value[2]);


    printf("Size of first array: %ld \n", arrays[0].len);

    return 0;
}
于 2013-02-13T10:09:36.690 に答える