0

char* 配列の配列を宣言するにはどうすればよいですか? (値が後で私のプログラムで埋められるとき..)これが私の目標です:

arr[0] = {"0a","0b","0c"};
arr[0][0] = "0a";
arr[0][1] = "0b";
..
arr[1] = {"1a","1b","1c"}
  1. ですかchar *arr[][]?私はかなり混乱しています。
  2. このパラメーターを関数に渡すとどうなりますか?
4

5 に答える 5

2

閉じますが、次のように、集約の初期化をすべて一度に使用する必要があります。

char arr[][2][3] = 
{
  {"0a", "0b"},
  {"1a", "1b"},
};

最も重要な (左端の) 配列以外はすべて、明示的にサイズを指定する必要があることに注意してください。または、各内部文字列を単なるポインターとして宣言することもできます。

const char * arr[][2] = 
{
  {"0a", "0b"},
  {"1a", "1b"},
};

それは、データがどのように構造化されているか、およびどの程度静的であるかによって異なります。各配列の内容を動的に割り当てたい場合は、別の方法として stl std::vector を使用します。

于 2013-04-29T15:30:40.923 に答える
1

char *arr[][] ですか?

ほぼ正しい音。ただし、宣言で配列のサイズを指定する必要があります。

于 2013-04-29T15:31:00.087 に答える
0

これらのいずれか。これは、ほとんどの人が C で混乱することの 1 つであることに注意してください。

char ** a;

aこれは、1 つまたは複数の文字への 1 つまたは複数のポインターへのポインターです。メモリのどこかにたくさんのポインターがあり、それぞれが文字列を指しています (いわば)。aこれらのポインターの最初のものを参照します。(a+1)2番目を指します。文字のブロックはそれぞれメモリ内のどこかに存在しますが、必ずしも互いに近くにあるとは限りません。あなたはこれを行うかもしれません:

for (int i = 0 ; i < 10 ; ++i) {
    a++ = malloc(100);
}

またはこれを行うことができます:

char *b = malloc(1000);
for (int i = 0 ; i < 10 ; ++i) {
    a++ = b;
    b += 100;
}

そして、それぞれ 100 文字への 10 個のポインターで配列を埋めます。(まだ文字を入力していないので、実際には 100 文字分のスペースがあります。)

char* a[];

ここでも、a一連の文字の最初の文字への一連のポインターがあります。とまったく同じchar ** aですが、それらをすべて再利用する場合はより理にかなっています。

for (int i = 0 ; i < 10 ; ++i) {
    a[i] = malloc(100);
}

上記と同じことを行いますが、特定の文字ブロックに簡単に戻ることができます。たとえば、次のことができます。strcpy(a[4], "Bob was here");

char a[][];

これは、同じ長さのブロックに分割できる一連の文字へのポインターであるという点で少し異なります。大きすぎてスタックに割り当てられない限り、この場合は通常、サイズを指定します。char a[10][100]メモリ内に 1000 個の文字スポットを割り当て、それぞれ 100 個ずつ 10 個のグループに分割します。

{"0a","0b","0c"};あなたの例は、3 つのメモリ ブロックを割り当てる方法であることに注意してください。それぞれの長さは 3 バイトで、そこにある文字 (および終了の \0 文字) が事前に取り込まれています。

于 2013-04-29T15:29:16.770 に答える
0
int main (int argc, char *argv[]){

    char arr[10][2][3] = {0};

    memcpy(&arr[0][0], "k", sizeof(arr[0][0]));
    memcpy(&arr[0][1], "ki", sizeof(arr[0][0]));
    memcpy(&arr[1][0], "s", sizeof(arr[0][0]));
    memcpy(&arr[1][1], "si", sizeof(arr[0][0]));

    printf("%s   %s\n", arr[0][0], arr[1][1]);

}
于 2013-04-29T15:48:48.843 に答える