Online C Compiler
Открыть в компиляторе

Учебная версия на русском. Код и его вывод сохранены в исходном виде.

Массив указателей в C

Отличайте массив адресов от указателя на массив и обращайтесь к объектам корректно.

Открыть в компиляторе

Массив указателей в C
Отличайте массив адресов от указателя на массив и обращайтесь к объектам корректно.

int *p[3] объявляет массив из трёх указателей на int, а int (*p)[3] — указатель на массив из трёх целых. Скобки меняют группировку частей объявления и потому его смысл.

Перед разыменованием каждый элемент должен содержать действительный адрес. Объекты могут находиться в разных местах, но обязаны существовать всё время использования указателей. Для печати адреса через %p преобразуйте аргумент к void *.

Массив указателей на строки не является прямоугольной матрицей символов. Для указателей на литералы используйте const char * и не изменяйте сами литералы. Нарисуйте адреса и объекты, чтобы проверить понимание.

Код C

#include <stdio.h>

int main(void)
{
    int first = 10;
    int second = 20;
    int third = 30;
    int *items[] = {&first, &second, &third};
    size_t count = sizeof items / sizeof items[0];

    *items[1] = 25;

    for (size_t i = 0; i < count; ++i) {
        printf("items[%zu] points to %d\n", i, *items[i]);
    }

    printf("second is now %d\n", second);
    return 0;
}
Открыть в компиляторе

Частые вопросы

Почему код и вывод остаются на английском?

Ключевые слова, идентификаторы и строки, проверяемые тестами, сохранены, чтобы не менять программу. Объяснения и элементы управления переведены.