3

cで、次のようなものを宣言すると:

char *somarray[] = {"Hello"};

どういう意味ですか ?

私がそれを印刷する場合:

somarray->スタック内のメモリアドレスを教えてくれます

&somarray- >同じこと、スタックメモリアドレスですが..

*somarray-> 定数のメモリアドレスを教えてくれます

実際に*somarray文字列を印刷するために使用できます。

何が起こっている?

4

5 に答える 5

7

*array[]あなたの例では、ポインタの配列を意味します:

char *somarray[] = {"Hello"}; 

somarray[]の配列ですchar*。この配列のサイズは 1 で、"Hello"次のような文字列にアドレスが含まれています。

somarray[0] -----> "Hello"

somarray配列の最初の要素のアドレスを意味します。

&somarray配列アドレスを意味します

*somarray最初の要素の値を意味します

"Hello"文字列のアドレスがたとえば 201 で、配列somaarayがアドレスであると仮定すると423、次のようになります。

+----+----+----+---+---+----+----+----+---+----+ 
| `H`| 'e'|'l'|'l'|'o'| '\0'|   
+----+----+----+---+---+----+----+----+---+---+----+  
 201   202  203 204 205 206  207   208 209 210  2
 ^
 | 
+----+----+
| 201     |
+----+----+
 423
somarray

と:

somarray 与える423

&somarray与える423

*somarray 与える201

注意点 somarray&somarray同じ値を与えますが、意味的には両方が異なります。1 つは最初の要素のアドレスで、もう 1 つは配列のアドレスです。この答えを読んでください。

于 2013-03-29T16:55:26.840 に答える
4

スタックに割り当てられた定数文字列の配列を宣言しています。

たとえば、これを行うことができます:

char* strs[] = { "Hello", "world" };

次に、定数文字列「Hello」と「world」strs[0]を指します。strs[1]

于 2013-03-29T16:55:17.153 に答える
1

文字列の配列です。これと同じです:

typedef char * string;
string somarray[] = {"Hello"};

つまり、somaarray の各要素は文字列です。文字列は、多くの文字へのポインタです。

于 2013-03-29T16:59:24.397 に答える
1

私はそれを次のように読むことを好みます

char* somearray[]

ポインターの配列を作成しているためです。

somearray の各要素は char* を指します。

于 2013-03-29T16:55:46.153 に答える
0

おそらくやりたかったことはこれです:

char somearray[] = {"Hello"};

あなたがしたことは、次のようにしてポインターへのポインターを作成することです。

char *somearray[] = {"Hello"};
于 2013-03-29T16:56:04.723 に答える