Почему переменная указателя со звездочкой и без звездочки ведет себя по-разному в функции printf
Я новичок в программировании, есть какая-то часть, которая заставила меня запутаться при изучении указателя.
int main() { char string[]="hello"; char *my_pointer=string; printf("first character is %c", *my_pointer); return 0; }
вывод: первый символ-h
код 2:
int main() { char array_of_words[]="one\0two\0three"; char *my_pointer=array_of_words; printf("%s \n",my_pointer); return 0; }
выход : один
Что я уже пробовал:
вопросы:
Я запутался здесь, часть функции printf в первом коде, использующая символ звездочки, означает указывать на то, что находится внутри указателя (my_pointer), который является адресом переменной строки, ссылающейся на строку указателя для массива, указывающего адрес памяти первого слова в массиве "hello". верно ли мое понимание?
а также когда я меняю %c в printf ("первый символ - %c", *my_pointer); на %s, программа падает. я хочу знать, почему я не могу использовать %s и что отличается, если я не использую звездочку в my_pointer в printf("первый символ - %c", my_pointer);
В то время как во втором коде *my_pointer=array_of_words скопируйте адрес первого содержимого array_of_the_words, который является 'o'? И char *my_pointer=array_of_the_words означает, что мы хотим *my_pointer имеет тот же адрес, array_of_the_words которые относятся к это'о'(?) если my_pointer в printf("%з\п",my_pointer) относится к памяти в адрес *my_pointer то почему бы не произвести "один" и не выпускать 'о' ??
На самом деле он копирует первый строковый адрес, но содержит все слова?
Но почему Во-первых использовать код *my_pointer в printf и второй код my_pointer в printf?
Я знаю, что *my_pointer относится к значению, а my_pointer - к адресу, но почему вывод отличается