cpp
является указателем на первый элемент массива
char **cp[] = {c+3, c+2, c+1, c};
Таким образом, после нанесения приращением
++cpp
cpp
будет указывать на второй элемент массива.
* ++ cpp - этот второй элемент и эквивалентен cp[1]
. Его значение (c+2
) является указателем на третий элемент массива c
char *c[] = {"GeksQuiz", "MCQ", "TEST", "QUIZ"};
Так **++cpp
этот третий элемент массива c
и утверждение
printf("%s ", **++cpp);
выведет строковый литерал адрес которого хранится в этом элементе, который является
TEST
Второе применение приращения указателя cpp
(++cpp
) приводит к тому, что указатель укажет на третий элемент массива cp
, который является элементом, который имеет значение c+1
Выражение *++cpp
дает это значение. c+1
является указателем на второй элемент attay c
Применяя operator --
, мы получаем указатель на первый элемент массива c
Выражение *--*++cpp
дает этот элемент массива c, который является адресом строкового литерала "GeksQuiz"
. Добавив 3 к этому адресу *--*++cpp+3
, вы получите указатель, указывающий на символ 's'
в этом строковом литерале. Так заявление
printf("%s ", *--*++cpp+3);
будет выводить эту строку литерал, начиная с этого символа
sQuiz
Как сейчас указатель cpp
указывает на третий элемент массива ф, то выражение cpp[-2]
дает первый элемент ARRA cp
, что содержит указатель c+3
Выражение *cpp[-2]
дает этот указатель, который является четырехгранным элементом массива c, а выражение *cpp[-2]+3
дает свой четвертый символ cter, который является символом 'Z'
строкового литерала "QUIZ"
.
Так заявление
printf("%s ", *cpp[-2]+3);
выводит эту строку литерал, начиная с символа 'Z'
, который сам по себе характер.
Z
Выражение cpp[-1]
дает второй элемент массива cp
, который c+2
. Выражение cpp[-1][-1]
эквивалентно *((c + 2) - 1)
, что в свою очередь эквивалентно *(c + 1)
и дает второй элемент массива c, который является адресом первого символа строкового литерала "MCQ"
Выражение cpp[-1][-1]+1
является указателем на второй символ строкового литерала, который равен 'C'
,
Так заявление
printf("%s ", cpp[-1][-1]+1);
будет выводить эту строку буквальным starrting от этого символа
CQ
Таким образом, выход программы
TEST sQuiz Z CQ
Откройте терминал, используйте 'cd' изменить каталог текущего рабочего каталога, введите в терминале' Gcc -stdc = 99 programfile.c', нажмите 'Enter', а затем введите' ./a. и снова нажмите клавишу Enter. Смотрите вывод и сообщите нам. – haccks
@rochak gupta Ожидается выход. :) –
@ VladfromMoscow Вы могли бы объяснить, как это было достигнуто? –