Tôi có một mảng các số nguyên không dấu cần lưu trữ con trỏ tới dữ liệu và chức năng cũng như một số dữ liệu. Trong thiết bị tôi đang làm việc với, con trỏ sizeof là giống như sizeof unsigned int. Làm thế nào tôi có thể cast con trỏ để chức năng vào int unsigned? Tôi biết rằng điều này làm cho mã không di động, nhưng nó là vi điều khiển cụ thể. Tôi cố gắng này:Con trỏ hàm chức năng đúc thành số nguyên trong C++
stackPtr[4] = reinterpret_cast<unsigned int>(task_ptr);
nhưng nó cho tôi một lỗi "chuyển kiểu không hợp lệ"
Đúc nó để làm mất hiệu lực con trỏ và sau đó đến int được lộn xộn.
stackPtr[4] = reinterpret_cast<unsigned int>(static_cast<void *> (task_ptr));
Có cách nào làm sạch không?
Edit - task_ptr là chức năng con trỏ void task_ptr(void)
câu trả lời Tình yêu Barmar của, mất thiếu sót Portability của tôi đi. Ngoài ra mảng của con trỏ void thực sự có ý nghĩa hơn sau đó Unsigned Ints. Cảm ơn Barmar và isaach1000.
EDIT 2: OK, trình biên dịch của tôi đang nghĩ mô hình bộ nhớ lớn vì vậy nó đang sử dụng con trỏ 32 bit không 16 bit mà tôi đang mong đợi (nhỏ với tổng bộ nhớ 17K).
Bạn không thể biến mảng thành mảng mảng con trỏ void? – isaach1000
Làm thế nào về việc sử dụng một liên kết của con trỏ hàm và con trỏ dữ liệu? – Barmar
Một 'reinterpret_cast' đơn giản sẽ hoạt động miễn là (a) kiểu số nguyên đủ lớn và (b) đó là con trỏ tới hàm bình thường (không phải thành viên hoặc thành viên tĩnh). Đó có phải là trường hợp ở đây không? Chính xác 'task_ptr' là gì? –