So sánh kích thước của char và string

So sánh char và string trong C++, ứng dụng trong thực tế thế nào khi xây dựng ứng dụng.

19
  1. Kiểu char
  2. Kiểu string
  3. Bên trong string có gì?
  4. Chuỗi dài hơn 32 ký tự thì sao?
  5. So sánh
  6. Một số kinh nghiệm kích thước char và string

1. Kiểu char

char chỉ lưu được 1 ký tự.

char c = 'A';
    

Kích thước:

sizeof(c) = 1
    

1 byte này chính là dữ liệu của ký tự 'A'.


2. Kiểu string

string s = "Hello";
    

Giả sử:

cout << sizeof(string);
    

Kết quả:

32
    

Lưu ý: 32 byte này không phải là số ký tự mà string lưu được.

Đây chỉ là kích thước của đối tượng string.


3. Bên trong string có gì?

Một đối tượng string thường chứa:

  • Địa chỉ vùng nhớ chứa chuỗi (con trỏ).
  • Độ dài hiện tại của chuỗi.
  • Dung lượng đã cấp phát.
  • Một số thông tin quản lý khác.
string s = "Hello";
    
+------------------------+
| string (32 byte)       |
|------------------------|
| Con trỏ ----------+    |
| Độ dài = 5        |    |
| Dung lượng = 15   |    |
| ...               |    |
+-------------------+    |
                          |
                          v
                  +----------------+
                  | H e l l o \0   |
                  +----------------+
    

4. Chuỗi dài hơn 32 ký tự thì sao?

string s(1000, 'A');
    

Chuỗi trên có 1000 ký tự.

Nhưng:

sizeof(s)
    

vẫn có thể trả về:

32
    

sizeof chỉ đo kích thước của đối tượng string, không đo vùng nhớ chứa các ký tự.


5. So sánh

Kiểu dữ liệu sizeof Lưu được bao nhiêu ký tự?
char 1 byte 1 ký tự
char ten[30] 30 byte Tối đa khoảng 29 ký tự + '\0'
string 24 hoặc 32 byte (tùy trình biên dịch) Tự động mở rộng, rất nhiều ký tự

6. Một số kinh nghiệm kích thước char và string

  • char lưu trực tiếp dữ liệu.
  • string lưu thông tin quản lý chuỗi.
  • Các ký tự của chuỗi thường được lưu ở vùng nhớ khác.
  • sizeof(string) không phải là số ký tự tối đa.
  • string có thể tự động mở rộng khi thêm dữ liệu.

Tìm kiếm:

So sánh char và string trong C++, ứng dụng trong thực tế thế nào khi xây dựng ứng dụng.