Я думаю, что вы, возможно, немного запутались между объявлением переменной-указателя и использованием указателя.
Любой тип данных со звездочкой после него является адресом значения данныхtype.
Итак, в C вы можете написать:char c;
и это означает, что значение c является одним символом.Ноchar *p;
является адресом символа.
'*' после имени типа означает, что значением переменной является адрес объекта этого типа.
Давайте поместим значение в c:c = 'H';
Итакchar *p;
означает, что значение p является адресом символа.p не содержит символа, он содержит адрес символа.
Оператор C & возвращает адрес значения, поэтомуp = &c;
означает положить адрес переменной с в р.Мы говорим «р указывает на с».
Теперь вот немного странная часть.Адрес первого символа в строке также является адресом начала строки.
Так что дляchar *p = "Hello World. I hope you are all who safe, sound, and healthy";
p содержит адрес 'H', и неявно, потому что символы являются смежными, p содержит адрес начала строки.
Чтобы получить символ в начале строки, 'H ', используйте оператор' get at the item, который указывает на ', то есть' * '.
Так что *p
это' H '
p = &c;
if (*p == c) { ... is true ... }
Когда вызывается функция или метод, чтобы использовать строку символов, только начальный адрес строки (обычно 4 или 8 байтов) должен быть передан функции, а не вся строка.Это и эффективно, и также означает, что функция может воздействовать на строку и изменять ее, что может быть полезно.Это также означает, что строка может быть общей.