c ++ не позволит вам преобразовать целочисленный тип в указатель без reinterpret_cast
или c-style cast
, однако ваша функция вводит в заблуждение и вы делаете вещи, которые никогда не должны выполняться.
char *ptr = 1; // error
char *ptr = reinterpret_cast<char*>(0x164651); // compiles but you must make sure this address will be valid !
Вы объявите вашу функцию для возврата elem *
и сделайте это указанием на успех или неудачу. В этом случае вы должны вернуть nullptr
в случае неудачи и указатель на нажатый или вытолкнутый элемент в случае успеха.
elem *pop(int &n, elem *&first, elem *&las)
{ elem *p=NULL;
if (first)
{ n=first->key;
p=first;
first=first->next;;
if (first==NULL)
last=first;
return p; // return the popped element to the caller
}
else
return nullptr; // failed to pop any element
}
Если вы настаиваете на указании успеха и неудачи значениями 1 и 0, поэтому вы должны использовать целочисленный тип в качестве возвращаемого типа без указателя.
int pop(int &n, elem *&first, elem *&las) // returns 1 on success otherwise 0
, а в c ++ лучше использовать исключения для обозначения сбоя , Это позволяет отделить путь ошибки от пути возврата и сохранить большую часть проверки ошибок, которую вы будете выполнять большую часть времени. Поэтому всегда используйте исключения c ++ и RAII, если это возможно, это значительно сэкономит вам.