Làm cách nào để lấy kích thước của con trỏ trong C bằng cách sử dụng sizeof
? Tôi muốn malloc một số bộ nhớ để lưu trữ một con trỏ (không phải là giá trị được trỏ đến).Lấy kích thước con trỏ trong C
Trả lời
Với một kiểu bất kỳ (tôi đã chọn char
đây, nhưng đó là vì lợi ích của ví dụ cụ thể):
char *p;
Bạn có thể sử dụng một trong hai của các biểu thức sau:
sizeof(p)
sizeof(char *)
Dẫn đến malloc()
cal l chẳng hạn như:
char **ppc = malloc(sizeof(char *));
char **ppc = malloc(sizeof(p));
char **ppc = malloc(sizeof(*ppc));
Phiên bản cuối cùng có một số lợi ích nếu loại ppc
thay đổi, biểu thức vẫn phân bổ không gian chính xác.
Dấu ngoặc đơn tùy chọn trong biểu thức đầu tiên. –
@CarlNorum Đúng, nhưng tôi thấy họ làm rõ biểu hiện khá một chút. Đó là vấn đề về phong cách, và không phải là thứ cần chỉnh sửa. –
+1 để xác định phiên bản cuối cùng được ưu tiên. –
này nên làm như lừa:
sizeof(void*)
char *ptr;
char **ptr2 = malloc(sizeof(ptr));
sẽ có thể đạt được mục đích của bạn. Bất kể nền tảng là gì, mã này sẽ hoạt động.
- 1. Cách lấy kích thước con trỏ trong C#
- 2. Con trỏ C++ có kích thước bit cụ thể
- 3. Kích thước của con trỏ là gì?
- 4. lấy con trỏ hàm 'ldftn' trong C#
- 5. C con trỏ: trỏ đến một mảng có kích thước cố định
- 6. Tại sao sizeof (param_array) là kích thước của con trỏ?
- 7. Kích thước con trỏ có khác nhau giữa dữ liệu và con trỏ hàm không?
- 8. kích thước của mảng và kích thước của con trỏ nhân vật nhân vật
- 9. Kích thước đường con trỏ CSS khi nhập trường Nhập
- 10. Cách tắt con trỏ thay đổi kích thước
- 11. Kích thước của một lớp với con trỏ 'này'
- 12. Con trỏ có thể có kích thước khác nhau không?
- 13. Không thể lấy địa chỉ, lấy kích thước hoặc khai báo con trỏ đến loại được quản lý
- 14. Cách lấy con trỏ tới IUnknown trong C#
- 15. Cách lấy tên hàm từ con trỏ hàm trong C#?
- 16. Kích thước của con trỏ có thay đổi theo C không?
- 17. Lấy kích thước của các kích thước trong mảng
- 18. Xóa con trỏ trong C++
- 19. Ý nghĩa của con trỏ trỏ tới con trỏ trong C và trong C++ là gì?
- 20. Tăng thêm con trỏ C
- 21. Vượt qua một mảng tới một hàm bọc như kích thước con trỏ + hoặc phạm vi
- 22. Con trỏ chức năng chung trong C
- 23. Con trỏ hàm trong C#
- 24. con trỏ Void trong C++
- 25. Cách lấy tên hàm của con trỏ chức năng C
- 26. jquery lấy phần tử con trỏ là
- 27. Cách lấy độ dài mảng con trỏ C?
- 28. lấy loại con trỏ chuột hiện tại
- 29. Lấy kích thước văn bản trong SFML
- 30. Lấy kích thước màn hình trong Java
AFAIK, con trỏ đến các loại khác nhau không được đảm bảo có cùng kích thước. – SLaks
Thật sao? Bạn có thể cung cấp một ví dụ/nguồn không? Tôi đã luôn luôn giả định tất cả các con trỏ có cùng kích thước bởi vì tất cả chúng đều đề cập đến các vị trí bộ nhớ trong cùng một không gian địa chỉ. – Matt
@Matt: Một counterexample tầm thường là một con trỏ hàm; đó không nhất thiết là cùng một không gian địa chỉ. Xem thêm: http://stackoverflow.com/questions/916051/are-there-are-any-platforms-where-pointers-to-different-types-have-different-siz. –