Я не понимаю это использование указателей - PullRequest
1 голос
/ 22 сентября 2019

Я пытаюсь понять это использование указателей.Из того, что я понял до сих пор, указатели значения содержат ссылку на адрес памяти другого объекта, и при использовании знака * мы получаем доступ к значению объекта, на который ссылается указатель.

Однако вВ этом коде, с которым я столкнулся в учебном пособии, которое я использую, указатель ptr_str имеет строковое значение, которое не является адресом памяти, поэтому я не понимаю, как *ptr_str (которое я ожидал получить в качестве значения ссылочнойлица) используется в цикле for.

char *ptr_str; int i;
ptr_str = "Assign a string to a pointer.";
for (i=0; *ptr_str; i++)
    printf("%c", *ptr_str++);

1 Ответ

2 голосов
/ 22 сентября 2019

This:

ptr_str = "Assign a string to a pointer.";

Сокращение для этого:

// Somewhere else:
char real_str[] = {'A', 's', 's', 'i', 'g', ..., '.', '\0'};

// In your main():
ptr_str = real_str;
// or
ptr_str = &real_str[0];

Другими словами, строковые литералы, такие как "Hello World", на самом деле являются указателями на массив символов, содержащий вашу строку.Все это прозрачным образом выполняется компилятором, поэтому это может сбить с толку на первый взгляд.

Если вам интересно, взгляните на этот другой мой ответ , где я объясняю этоболее подробно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...