C の学習を始めたばかりで、文字列ポインターと文字列 (char の配列) について混乱していることに気付きました。誰かが私の頭を少しすっきりさせるのを手伝ってくれませんか?
// source code
char name[10] = "Apple";
char *name2 = "Orange";
printf("the address of name: %p\n", name);
printf("the address of the first letter of name: %p\n", &(*name));
printf("first letter of name using pointer way: %c\n", *name);
printf("first letter of name using array way: %c\n", name[0]);
printf("---------------------------------------------\n");
printf("the address of name2: %p\n", name2);
printf("the address of the first letter of name2: %p\n", &(*name2));
printf("first letter of name2 using pointer way: %c\n", *name2);
printf("first letter of name2 using array way: %c\n", name2[0]);
// output
the address of name: 0x7fff1ee0ad50
the address of the first letter of name: 0x7fff1ee0ad50
first letter of name using pointer way: A
first letter of name using array way: A
---------------------------------------------
the address of name2: 0x4007b8
the address of the first letter of name2: 0x4007b8
first letter of name2 using pointer way: O
first letter of name2 using array way: O
そのため、name と name2 の両方が自身の最初の文字のアドレスを指していると想定しています。それから私の混乱は(以下のコードを参照)
//code
char *name3; // initialize a char pointer
name3 = "Apple"; // point to the first letter of "Apple", no compile error
char name4[10]; // reserve 10 space in the memory
name4 = "Apple"; // compile errorrrr!!!!!!!!!!
「Apple」の最初の文字への name2 および name2 ポインターと呼ばれる char ポインターを作成します。これで問題ありません。次に、char の別の配列を作成し、メモリに 10 スペースを割り当てます。次に、「Apple」の最初の文字を指すアドレスである name4 を使用してみます。その結果、コンパイルエラーが発生しました。
私はこのプログラミング言語にとてもイライラしています。時々それらは同じように働きます。しかし、そうでない場合もあります。誰でもその理由を説明できますか?また、文字列または文字の配列を別々の行に作成したい場合はどうすればよいですか? どうすればそれができますか???
どうもありがとう...