Tôi đang tạo mảng động với loại dữ liệu int*
sử dụng malloc()
. Nhưng vấn đề là: làm thế nào để biết kết thúc của mảng? không có tương đương với \0
cho loại dữ liệu int*
, do đó, cách thực hiện việc này? vượt qua kích thước như tham số ra của chức năng? Tôi hy vọng điều này là rõ ràng cho bạn. Bất kỳ trợ giúp là rất đánh giá cao.Làm thế nào để biết kết thúc của mảng int *?
Trả lời
C không quản lý độ dài mảng, như một số ngôn ngữ khác thực hiện.
bạn có thể xem xét một cấu trúc cho việc này:
typedef struct t_thing {
int* things;
size_t count;
} t_thing;
sử dụng:
t_thing t = { (int*)malloc(sizeof(int) * n), n };
Không có "chính thức" tương đương với \0
cho số nguyên, nhưng bạn chắc chắn có thể sử dụng giá trị của riêng bạn. Ví dụ, nếu số nguyên của bạn đại diện cho khoảng cách sau đó bạn có thể sử dụng -1 (không phải là một khoảng cách hợp lệ) như là một giá trị sentinel để cho biết kết thúc của mảng.
Nếu dãy số nguyên của bạn có thể hợp lý chứa giá trịint
, thì bạn có thể trả về kích thước của mảng được phân bổ với tham số bổ sung cho hàm của bạn.
Tôi thích bạn ý tưởng. Tôi cũng sẽ sử dụng '#define EON EOF'. – Jack
Bạn có thể sử dụng NULL
làm giá trị cuối. Bạn có thể thêm một số nguyên vào một cấu trúc với mảng theo dõi số lượng mục nhập. Hoặc bạn có thể theo dõi kích thước riêng biệt. Bạn có thể làm điều đó tuy nhiên bạn muốn.
Làm thế nào bạn có thể sử dụng NULL làm giá trị kết thúc cho một int []? Các byte 00 00 00 00 sẽ chỉ được hiểu là (int) 0. –
Chính xác. Nếu không có giá trị nào khác trong mảng chứa 0, thì bạn có thể sử dụng 0 làm trình kết thúc. –
Và nếu không có giá trị nào khác chứa 42, bạn có thể sử dụng 42. Câu trả lời ngụ ý cho tôi ít nhất là 'int' bằng cách nào đó là một kiểu nullable, tất nhiên là không. –
C không biết đâu là cuối mảng động của bạn. bạn nên nhớ kích thước mà bạn phân bổ cho mảng.
khi u cấp phát bộ nhớ với malloc, số byte được phân bổ được lưu trữ ngay trước khi bắt đầu bộ nhớ 'malloc'ated. nếu bạn biết kích thước, bạn cũng biết kết thúc! Điều này được giải thích trong kinh thánh của C, sách K & R. Ước gì tôi cũng có thể cung cấp cho bạn số trang, nhưng bạn sẽ biết nó khi bạn thấy nó.
- 1. Làm thế nào để bash biết nơi tên biến của tôi kết thúc?
- 2. Làm thế nào để biết khi nào đồng bộ kết thúc?
- 3. Làm thế nào để chuyển đổi mảng int thành int?
- 4. Làm thế nào để phát hiện kết thúc chuỗi trong mảng byte để chuyển đổi chuỗi?
- 5. Làm thế nào để biết khi nào một dịch vụ CompletionService kết thúc phân phối kết quả?
- 6. Truy vấn Javascript WebSQL trong vòng lặp. Làm thế nào để biết khi nào kết thúc?
- 7. Làm thế nào để biết khi nào EnumWindows kết thúc việc liệt kê các cửa sổ?
- 8. làm thế nào để biết nếu một chuỗi $ kết thúc bằng ','?
- 9. Làm thế nào tôi có thể biết Khi nào một hoạt ảnh UITableView đã kết thúc?
- 10. Làm thế nào để xác định kết thúc của một mảng số nguyên khi thao tác với con trỏ nguyên?
- 11. Làm thế nào để kết thúc dòng lệnh git-svn?
- 12. NSPredicate: làm thế nào để KHÔNG kết thúc?
- 13. Làm thế nào để Chuyển đổi int [] để int [,] - C#
- 14. Làm thế nào để xóa [] biết kích thước của một mảng?
- 15. Làm cách nào để biết liệu một Drag Drop đã kết thúc trong Winforms?
- 16. Làm thế nào để biết khi nào một hoạt động kết thúc một cách bố trí vượt qua?
- 17. WCF: Làm cách nào để biết thời điểm phiên kết thúc?
- 18. Vim: Thay thế kết thúc của dòng
- 19. ExecutorService, làm thế nào để biết khi nào tất cả các luồng kết thúc mà không chặn luồng chính?
- 20. int mảng kết cấu OpenGL trong android
- 21. Làm thế nào để thêm dòng để kết thúc của tập tin - linux
- 22. Làm thế nào để chuyển đổi một mảng boolean để một mảng int
- 23. Làm thế nào để phát hiện sự kiện kéo kết thúc của một UITableView?
- 24. Làm thế nào tôi có thể kết thúc ncurses mà không kết thúc chương trình C++?
- 25. Nhận phần tử mảng từ chỉ số để kết thúc
- 26. Làm thế nào để chuyển đổi một mảng byte thành một mảng int?
- 27. Làm thế nào để biết byte đọc (offset) của BufferedReader?
- 28. Làm thế nào để tìm địa chỉ kết thúc của một hàm trong một prog C?
- 29. Làm thế nào để phát hiện sự kết thúc của một chuỗi phương pháp trong Ruby
- 30. Làm thế nào để có được sự kiện kết thúc của CATransition/Animation?
Bạn đang sử dụng malloc() glob một số bộ nhớ như malloc (sizeof (int) * ELEMENTS) tôi cho là vậy. Sau đó, bạn thực sự biết rằng ELEMENTS có kích thước, bạn có thể lưu biến và chuyển nó vào các hàm của bạn. –