0

次の配列の宣言があります

char array1[10] = "Nick";
char array2[10] = "Tomas";
char array3[10] = "Nathan";
char array4[10] = "John";
char array5[10] = "Paul";
char *new_array[3][1];

この方法で新しいテーブルを作成したい

Nick Tomas
Nick Nathan
Nick John
Nick Paul

まず、new_array の宣言は正しいですか? 第二に、私は今までそのようなことを試みましたが、もちろん正しくありません

for (j = 0; j<4; ++j)
    {
        new_array[j][k]=array1;
        for (k = 0; k<2; ++k)
        {
            new_array[j][k]=array2;
        }
    }
    for (j = 0; j<4; ++j)
        for (k = 0; k<2; ++k)
        {
            printf("%s\t", new_array[j][k]);
            if(j==1)
            printf("\n");
        }

解決策または for ループを使用してそれを行う方法の詳細が欲しい

4

1 に答える 1

3

単に次のようなものではないのはなぜですか

char *new_array[][2] = {
    { array1, array2 },
    { array1, array3 },
    { array1, array4 },
    { array1, array5 }
};

この配列のエントリ数を取得するには、次を使用できます

sizeof(new_array) / sizeof(new_arrag[0])

ただし、この配列を引数として関数に渡すと、ポインターに減衰し、その「トリック」は使用できません。代わりに、配列とともに数値を渡す必要があります。


一度に 2 つのエントリを印刷するには、次のようなものを使用できます。

for (size_t i = 0; i < sizeof(new_array) / sizeof(new_arrag[0]); i += 2)
    printf("%s %s\n", new_array[i], new_array[i + 1]);
于 2013-07-12T11:01:22.437 に答える