30/09/2018, 17:57

Hỏi về sự khác nhau giữa Null, "", 0

Xin chào mọi người,
Mình có các biến như sau :

String a = “”;
String b = null;

int c = 0;
int d = null;

Việc khai báo giá trị là null, có khác gì so với giá trị là 0 hay “” : Về tốc độ và cấu trúc bộ nhớ. Mong mọi người giúp đỡ, mình xin cảm ơn !

Bao "Storm" Le viết 20:14 ngày 30/09/2018
  • Null: Một con trỏ hằng null có thể được chuyển đổi sang bất kỳ loại con trỏ (hoặc kiểu con trỏ-to-thành viên), trong đó có một giá trị con trỏ null. Đây là một giá trị đặc biệt mà chỉ ra rằng con trỏ không trỏ đến bất kỳ đối tượng. (Cpusplus.com và Google dịch cho biết).
  • 0: là 1 số nguyên.
  • “” : 1 chuỗi rỗng.
Ha Gia Phat viết 20:04 ngày 30/09/2018

Mình có đọc đâu đó là NULL được define kiểu #define NULL 0, vậy NULL hoặc 0 cũng thực chất là giống nhau đúng ko nhỉ còn cái nullptr là dành riêng cho pointer (câu trả lời không liên quan cho lắm)

Ha Gia Phat viết 20:06 ngày 30/09/2018

Sau 1 hồi google thì mình tìm hiểu được là String a = “”; thì nó sẽ tạo 1 string tạm với nội dung là “” rồi copy constructor được gọi để tạo string a (tức là 2 bước lận).

Bạn muốn nhanh thì dùng kiểu string a(""); thì nó sẽ khởi tạo trực tiếp - là nhận vào parameter const char * nên gọi cái constructor tương ứng.

Còn cái string b = null; có khác gì không thì mình ko biết

明玉 viết 20:04 ngày 30/09/2018

Mình mới debug trong VS xong:
String a = “” là khởi tạo biến a kiểu class, xong là gọi copy contructor chuỗi rỗng, biến a không phải pointer mà là cả cái dữ liệu String đó.
C++ không có null mà chỉ có NULL thôi, nó chính là số 0.
String b = NULL biên dịch được nhưng chạy là báo lỗi, do compiler hiểu NULL ở đây là một pointer trỏ đến chuỗi, nhưng pointer này bằng 0 nên báo lỗi bằng assert.
int c = 0;
và int d = NULL đều là một, không khác nhau, mỗi biến chiếm sizeof(int) byte zero trên bộ nhớ.

Nói thêm là về vấn đề NULL hay 0 khá là nhập nhằng, nên lên chuẩn C++11 có thêm từ khóa nullptr cho khỏi lộn xộn.

Bao "Storm" Le viết 20:01 ngày 30/09/2018

“int c = 0; và int d = NULL đều là một” lần đầu nghe đấy. Bạn debug giúp mình xem c = 0 và d = 100, rồi dùng sizeof() xem kết quả giống nhau không nhé

明玉 viết 20:02 ngày 30/09/2018

Giống nhau mà bạn:

Bao "Storm" Le viết 20:06 ngày 30/09/2018

Căn bản là nó khác nhau về giá trị. Bạn lại đi so sánh lưu lượng vùng nhớ của nó làm gì

Ha Gia Phat viết 20:05 ngày 30/09/2018

NULL với 0 mình chắc chắn nó giống nhau nhé bạn, NULL được định nghĩa bằng cách
#define NULL 0;
http://bytes.com/topic/c/answers/61514-question-about-null
Bạn tham khảo link này.

Bài liên quan
0