У меня есть простой тестовый код для Функция Pointer:Функция указатель
void PrintHello(char *name)
{
printf("Hello %s\n", name);
}
int main(int argc, const char * argv[])
{
//ptr is a function pointer
void (*ptr)(char*);
ptr = PrintHello;
ptr("world");
return 0;
}
Код сборки & успешно работать. Распечатывается строка «Hello world».
Но, что я не понимаю, функция PrintHello(char*)
принимает указатель на строку в качестве аргумента. Но мой код вызывает эту функцию через Функциональный указательptr("world")
, в котором я прямо передал строку «мир» функции, а не указатель на строку. Почему это работает?
Это указатель на 'char', а не указатель на строку – blgt
' char * 'не является указателем *** на строку ***. _' "hello" '_ на самом деле является' const char * '. SO, возможно, не лучшее место для изучения основ C++ BTW. –
Также обратите внимание, что строковый литерал становится 'const char *', а не 'char *'. Вы избегаете этого, потому что вы являетесь компилятором, являющимся снисходительным (это использование обычно было обычным явлением, поэтому компиляторы могут его поддерживать, хотя это не является строго законным). – BoBTFish