Tôi đang ở giữa dự án C này mà tôi muốn làm cho bộ nhớ rất hiệu quả. Trong một số trường hợp, tôi đang sử dụng void * s của một cấu trúc mảng động mà tôi đã viết để giữ bit. Tôi muốn sử dụng tất cả 64 (trong trường hợp này) bit.Thay đổi bit trên một con trỏ C?
Tôi sớm nhận ra rằng bạn không thể thực sự thực hiện bất kỳ thao tác bit nào trên con trỏ. Vì vậy, giải pháp của tôi là như sau:
void *p;
((unsigned long)p) << 4;
((unsigned long)p) & 3;
Việc này được thực hiện, nhưng chỉ vì trên máy tính của tôi, thời gian và con trỏ có kích thước bằng nhau. Đây có phải là trường hợp trong tất cả (hoặc hầu hết) kiến trúc?
Và câu hỏi thực sự của tôi: Có cách nào đúng hơn để thực hiện thao tác bit trên con trỏ không? Tôi đã nghĩ rằng phương pháp này là hơi phổ biến ở C (đóng gói bit thành một void *), nhưng tôi có thể bị nhầm lẫn ...
Tôi sẽ sử dụng uint64_t thay vì từ stdint.h – sambowry
uint64_t sẽ quá lớn nếu nền tảng của bạn có con trỏ ít hơn 64 bit. Sử dụng intptr_t và uintptr_t từ cùng một tiêu đề. – tgamblin
@sambowry - Có vẻ như bạn cần phải đi qua 'stdint.h' một chút gần hơn. –