cで、次のようなものを宣言すると:
char *somarray[] = {"Hello"};
どういう意味ですか ?
私がそれを印刷する場合:
somarray->スタック内のメモリアドレスを教えてくれます
&somarray- >同じこと、スタックメモリアドレスですが..
*somarray-> 定数のメモリアドレスを教えてくれます
実際に*somarray文字列を印刷するために使用できます。
何が起こっている?
*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 つは配列のアドレスです。この答えを読んでください。
スタックに割り当てられた定数文字列の配列を宣言しています。
たとえば、これを行うことができます:
char* strs[] = { "Hello", "world" };
次に、定数文字列「Hello」と「world」strs[0]を指します。strs[1]
文字列の配列です。これと同じです:
typedef char * string;
string somarray[] = {"Hello"};
つまり、somaarray の各要素は文字列です。文字列は、多くの文字へのポインタです。
私はそれを次のように読むことを好みます
char* somearray[]
ポインターの配列を作成しているためです。
somearray の各要素は char* を指します。
おそらくやりたかったことはこれです:
char somearray[] = {"Hello"};
あなたがしたことは、次のようにしてポインターへのポインターを作成することです。
char *somearray[] = {"Hello"};