Mam tablicę liczb całkowitych bez znaku, które muszą przechowywać wskaźniki dla danych i funkcji, a także niektóre dane. W urządzeniu, z którym pracuję, wielkość wskaźnika jest taka sama jak rozmiar unsigned int. Jak rzucić wskaźnik do funkcji w unsigned int? Wiem, że to sprawia, że kod nie jest przenośny, ale jest on specyficzny dla mikrokontrolerów. Próbowałem to:Wskaźnik funkcji Casting do Integer w C++
stackPtr[4] = reinterpret_cast<unsigned int>(task_ptr);
ale to daje mi błąd „nieprawidłowy konwersji typu”
Casting go unieważnić, a następnie wskaźnik do int jest niechlujny.
stackPtr[4] = reinterpret_cast<unsigned int>(static_cast<void *> (task_ptr));
Czy jest to czysty sposób?
Edit - task_ptr jest funkcja wskaźnik void task_ptr(void)
odpowiedź Miłość Barmar za, zapiera mi przenośność mankament hotelu. Również tablica pustego wskaźnika ma więcej sensu niż niepodpisane wartości Ints. Dziękuję Barmar i isaach1000.
EDYCJA 2: Rozumiem, mój kompilator myśli o dużym modelu pamięci, więc używa 32-bitowych wskaźników, nie 16-bitowych, których oczekiwałem (małe mikroskopy o całkowitej pamięci 17K).
Nie możesz utworzyć tablicy pustych wskaźników? – isaach1000
Co powiesz na połączenie wskaźników funkcji i wskaźników danych? – Barmar
Prosta 'reinterpret_cast' powinna działać tak długo, jak (a) typ całkowity jest wystarczająco duży i (b) jest wskaźnikiem dla normalnej (nieczłonkowej lub statycznej składowej) funkcji. Czy tak jest w tym przypadku? Czym dokładnie jest 'task_ptr'? –