Что выводится этот код, массив и указатели
У меня есть несколько вопросов относительно кода ниже.
- Если у меня есть указатель какого-то типа, что это значит использовать индексирование массива с ним? в этом примере, что делает
ptr[3]
обозначать (ptr - указатель какого-то типа)? Выход программы должен быть
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; }
Используя этот визуализатор, мы видим, что ptr1 будет указывать на str, я просто не понимаю, почему это происходит.
Помощь приветствуется.
1 ответ
Если у меня есть указатель какого-то типа, что это значит использовать индексирование массива с ним? в этом примере, что означает ptr[3] (ptr - указатель некоторого типа)?
В С, a[i]
является синтаксическим сахаром для *(a + i)
, Это допустимый синтаксис для указателей, даже если они не указывают на массив.
Выход программы должен быть или не быть (Гамлет), но я не уверен, почему, моя проблема со строкой (&ptr2)[3] = str, я не понимаю, как эта строка изменяется третий элемент массива ptr1.
Линия (&ptr2)[3]
ничего не меняет в str1
, Он пытается получить доступ к неизвестной ячейке памяти.
Если вам сказали, что выход этой программы должен быть "быть или не быть (Гамлет)", то вы ошиблись.