Рассмотрим следующую программу:недействительным указатель в параметре функции
#include <iostream>
void f(void* a)
{
std::cout<<"(void*)fun is called\n";
std::cout<<*(int*)a<<'\n';
}
int main()
{
int a=9;
void* b=(int*)&a;
f(b);
return 0;
}
Если изменить оператор вызова функции вроде этого:
f(&b);
Он по-прежнему отлично компилируется & аварий во время выполнения. Зачем? Какова причина? Должен ли я получить ошибку времени компиляции? Поскольку правильным способом вызова функции является f (b). правильно? Кроме того, почему разрешено передавать NULL функции, параметр которой имеет тип (void *)?
Пожалуйста, исправьте меня, если я что-то упустил или что-то понял неправильно.
Указатель указателя по-прежнему является указателем, поэтому он принимается за пустоту *. – Ely
Вы, вероятно, хотели бы передать адрес 'a' для достижения того же:' f (&a); ' –
@meet Пока комментарии EdHeals не совсем хороши, в основном он прав. Если вы не понимаете, что это делает, – deviantfan