Xác định số phần tử có trong mảng

Cho em hỏi có cách nào để biết có bao nhiêu phần tử trong mảng động không ạ, như trong mảng tĩnh em có thể dùng:

int a[] = {2, 3, 4, 9};
printf("%d", sizeof(a)/sizeof(int));

Hay có cách nào để kiểm soát số phần tử rác của mảng động không ạ?
Em cảm ơn ạ!

1 Like

Em lấy ví dụ cách em làm để tính số phần tử có trong mảng tĩnh.
Em muốn hỏi là có cách nào để biết có bao nhiêu phần tử trong mảng động không ạ?

Kiểm soát nó ngay khi tạo mới thôi.

5 Likes

Không có cách nào để kiểm tra số phần tử có trong mảng động trong C đâu cậu.
Cậu chỉ có cách như @SITUVN.gcd đã đề cập, lưu giá trị số phần tử của mảng vào đâu đó - biến, file, hay thậm chí cậu có thể trick 1 chút bằng cách khởi tạo mảng thêm 1 phần tử, và lưu size của array vào phần tử đầu tiên (Tuy nhiên, cách này cũng có giới hạn, đấy là size của array không được vượt quá size của 1 phần tử, chẳng hạn 1 mảng kiểu char được cài đặt theo cách này không thể có nhiều hơn 256 phần tử - do phần tử đầu tiên chỉ có kích thước là 8 bit. Thực tế, string của Excel và Pascal được implement kiểu này, và đó là lý do Excel nhanh tới như vậy).

6 Likes

bạn có thể dùng vector mà không cần quan tâm đến kích thước của mảng

3 Likes

C làm gì có vector hả bạn :v

5 Likes

cho em hỏi tại sao kích thước phần tử đầu tiên liên quan đến giới hạn của mảng ạ;
theo em hiểu thì khai báo bao nhiêu thì ram cấp bấy nhiêu chứ nhỉ???
theo em hiểu về cấp phát như này ạ

Dùng giá trị của phần tử đầu tiên (arr[0]) để lưu kích thước mảng. Giới hạn ở đây là giá trị này phụ thuộc kiểu.
Giả sử bạn khai báo mảng kiểu char1000 phần tử, bạn “nhét” giá trị 1000 vào phần tử đầu tiên kiểu gì? Nhớ, kiểu char (1 byte) chỉ có thể lưu đến số lớn nhất (không dấu) là 255.

3 Likes

Uhm, với trick mà tớ đề cập:

Như @SITUVN.gcd đã giải thích, cậu có thể thấy, nếu cậu lưu trữ kích cỡ của array vào phần tử đầu tiên, cậu chỉ có thể lưu trong giới hạn mà phần tử đó support được.
Như ví dụ mà @SITUVN.gcd đề cập:

Cậu chỉ có thể dùng trick này trên mảng char nếu mảng này có kích thước nhỏ hơn 255. Nếu kích thước mảng này lớn hơn 255, hẳn nhiên cậu không thể lưu được giá trị đó lên phần tử đầu tiên của mảng :smile:

2 Likes

Ko phải :smiley: lý do mn cũng đã giải thích rồi.

Tóm lại thì cứ làm hẳn 1 struct cho lành. Bạn có thể tham khảo ở đây để làm thư viện string :smiley:

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?