-3

以下のコードについていくつか質問があります。

  1. あるタイプのポインターがある場合、それで配列インデックスを使用するとはどういう意味ですか? この例では、何ptr[3]の略ですか (ptr は何らかの型のポインターです)。
  2. プログラムの出力は次のようになるはずですが、理由がわかりませんto be or not to be (Hamlet)。私の問題は行にあります。この行が配列の 3 番目の要素をどのように変更するのかわかりません。(&ptr2)[3] = strptr1

    int main()
    {
     char str[] = "hmmmm...";
     const char *const ptr1[] = {"to be", "or not to be", "that is the question"};
     char *ptr2 = "that is the question";
    
     (&ptr2)[3] = str;
    
     strcpy(str, "(Hamlet)");
     for (int i = 0; i < sizeof(ptr1) / sizeof(*ptr1); ++i)
     {
        printf("%s ", ptr1[i]);
     }
     return 0;
    }
    

このビジュアライザーを使用すると、ptr1 が str を指すことがわかりますが、なぜそうなるのかわかりません。

助けていただければ幸いです。

4

1 に答える 1

2

あるタイプのポインターがある場合、それで配列インデックスを使用するとはどういう意味ですか? この例では、ptr[3] は何を表していますか (ptr は何らかの型のポインターです)。

C では、 のa[i]シンタックス シュガーです*(a + i)。これは、ポインターが配列を指していない場合でも、ポインターの有効な構文です。

プログラムの出力は、あるべきかどうか (Hamlet) であるはずですが、その理由がわかりません。私の問題は、行 (&ptr2)[3] = str にあります。この行がどのように変化するのかわかりません。 ptr1 配列の 3 番目の要素。

(&ptr2)[3]は何も変更しませんstr1。不明なメモリ ロケーションにアクセスしようとします。

このプログラムの出力が「(ハムレット) になるかどうか」であると言われたら、それは間違っていると言われました。

于 2019-02-22T21:31:17.657 に答える