Рубрики

C | Расширенный Указатель | Вопрос 3

#include <stdio.h>

int main()

{

    int a[5] = {1,2,3,4,5};

    int *ptr = (int*)(&a+1);

    printf("%d %d", *(a+1), *(ptr-1));

    return 0;

}

(А) 2 5
(B) стоимость мусора
(C) Ошибка компилятора
(D) Ошибка сегментации

Ответ: (А)
Пояснение: Программа печатает «2 5».

Поскольку компиляторы преобразуют операции с массивами в указатели перед доступом к элементам массива, (a + 1) указывает на 2.

Выражение (& a + 1) на самом деле является адресом сразу после конца массива (после адреса 5), поскольку & a содержит адрес элемента размером 5 * integer_size, а когда мы делаем (& a + 1), указатель увеличивается на 5 * integer_size.

Рекомендуемые посты:

C | Расширенный Указатель | Вопрос 3

0.00 (0%) 0 votes