я пытаюсь обернуть голову фрагментом кода, который мы получили в нашей лекции по Си, но я не могу понять, что он делает.
Вот код:
int main() {
static char *s[] = {"black", "white", "pink", "violet"};
char **ptr[] = {s+3, s+2, s+1, s}, ***p;
p = ptr;
++p;
printf("%s", **p+1);
return 0;
}
Приведенный выше код печатает «чернила», но как это работает?
Попытка
printf("s: %c\n",*s[0]);
дает мне 'b'
, *s[1]
возвращает 'w'
, *s[2]
возвращает 'p'
и так далее. Таким образом, *s
в основном возвращает первую букву строк, с которыми он был инициализирован. Попытка
printf("s: %c\n",**ptr[0]);
возвращает v
, поэтому *s
выглядит примерно так:
{b,w,p,v};
Это, однако, не подтверждается sizeof(s)
, возвращающим 16, а не 4.
Итак, мой вопрос: что здесь происходит? Где хранятся остальные персонажи?