投稿

ラベル(C)が付いた投稿を表示しています

Cにおける文字列の配列 - charの二次元配列と、charのポインターのポインターの違い -

Follow @venividivici830 charの二次元配列と、charのポインターのポインターは、どちらも文字列の配列として利用できる。 しかし、両者は同じではない。 違いがわからなかったため、以下に整理した。 charの配列と、charのポインター 先に、より簡単な、charの配列と、charのポインターについて整理した。 charの配列も、charのポインターも、文字列として扱える。 #include <stdio.h> int main() { // charの配列 char name_a[] = "john lennon"; printf("%s\n", name_a); // charのポインター char *name_p = "paul mccartney"; printf("%s\n", name_p); return 0; } 実行結果 john lennon paul mccartney (下記コードのname_p = name_aのように)配列をindex指定なしで使うと、配列の先頭要素のアドレスとして扱われる。  このため、アドレスを格納するための型であるcharのポインターに代入できる。 しかし、配列の先頭要素のアドレスは変更できない仕様のため、charのポインターを配列に(先頭要素のアドレスとして)代入することはできない。 #include <stdio.h> int main() { char name_a[] = "john lennon"; char *name_p = "paul mccartney"; /* * index指定なしだと、配列は、配列の先頭要素のアドレスとして扱われる * よって、下記の2つは同じ値を出力する */ printf("%p\n", &name_a[0]); /* &は、変数のアドレスを取得する演算子 */ printf("%p\n", name_a); /* * 配列の先頭要素の「アドレス」なので、c...