Что выводится этот код, массив и указатели - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть несколько вопросов относительно приведенного ниже кода.

  1. Если у меня есть указатель какого-либо типа, что значит использовать индексирование массива вместе с ним?в этом примере, что означает ptr[3] (ptr - указатель какого-либо типа)?
  2. Предполагается, что вывод программы будет to be or not to be (Hamlet), но я не уверен, почему, мойпроблема со строкой (&ptr2)[3] = str, я не понимаю, как эта строка изменяет третий элемент массива ptr1.

    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;
    }
    

Использование this визуализатор, мы видим, что ptr1 будет указывать на str, я просто не понимаю, почему это происходит.

Помощь оценена.

1 Ответ

0 голосов
/ 23 февраля 2019

Если у меня есть указатель какого-либо типа, что значит использовать индексирование массива вместе с ним?в этом примере, что означает ptr [3] (ptr - указатель некоторого типа)?

В C a[i] является синтаксическим сахаром для *(a + i).Это допустимый синтаксис для указателей, даже если они не указывают на массив.

Предполагается, что выходные данные программы будут или не будут (Гамлет), но я не уверенпочему моя проблема со строкой (& ptr2) [3] = str, я не понимаю, как эта строка изменяет третий элемент массива ptr1.

Строка (&ptr2)[3] неничего не меняйте в str1.Он пытается получить доступ к неизвестной ячейке памяти.

Если вам сказали, что выход этой программы должен быть «быть или не быть (Гамлет)», то вам сказали неправильно.

...