30/09/2018, 18:11

NULL có ý nghĩa như thế nào

Null có ý nghĩa gì ?
ví dụ con trỏ NULL thì khác với con trỏ chưa khởi tạo như thế nào
*int p1;
*int p2 = NULL;

Mai Anh Dũng viết 20:14 ngày 30/09/2018

NULL tương đương với 0

Một con trỏ mới tạo ra trỏ “linh tinh” vào một vùng nhớ nào đấy. Gán con trỏ bằng NULL để đảm bảo nó trỏ về 0. Dù 0 cũng là một vị trí không hợp lệ, nhưng mình sẽ dễ quản lý hơn là khi con trỏ trỏ về một vùng nào đó mình không biết.

Trí Kiều viết 20:26 ngày 30/09/2018

Vậy bất cứ khi nào khởi tạo tất cả con trỏ đêu trỏ về 0 ?

Gió viết 20:24 ngày 30/09/2018

Một số nnlt có quy định về giá trị mặc định. Trong C/C++ để đảm bảo tối đa tốc độ thì nó không dc gán về NULL

Interns viết 20:17 ngày 30/09/2018

*int p; (khai báo biến con trỏ kiểu nguyên)
int a = 5; (khai báo và khởi tạo biến a có giá trị là 5)
*int p = &a; (con trỏ p đang trỏ tới biến a)
*int p = NULL; (khai báo và khởi tạo con trỏ p trỏ tới NULL theo như anh @ltd thì NULL là 0)

Trần Minh Thắng viết 20:25 ngày 30/09/2018

Nó không trỏ đến một cái gì đó rõ ràng hết. Khi build chương trình sẽ báo lỗi. Gán cho nó là NULL để dễ kiểm soát nó hơn. Ví dụ: Nếu con trỏ bằng NULL thì cấp phát động. Mình hiểu vậy.

thienit viết 20:16 ngày 30/09/2018

Null tương đương với 0. Nhưng khác ở chỗ null trong java thì dành cho biến tham chiếu, còn 0 dành cho biến tham trị.

Nhuyngo Nhuyngo95 viết 20:17 ngày 30/09/2018

trong dslk NULL không phải là nút cuối hả p

Hoàng Việt viết 20:20 ngày 30/09/2018

trình

Null không phải là nút cuối, mà là nút cuối trỏ next tiếp theo sẽ là null

Nhuyngo Nhuyngo95 viết 20:16 ngày 30/09/2018

vậy theo p nói vậy null mặc định nó không bằng 0

Trần Minh Thắng viết 20:14 ngày 30/09/2018

Mình có nói nó là nút cuối bao giờ đâu

Trần Minh Thắng viết 20:19 ngày 30/09/2018

Ý bạn là sao? Nút cuối liên quan gì

Hoàng Việt viết 20:20 ngày 30/09/2018

Oh, mình quote nhầm của bạn nhuyngo_nhuyngo95 thành của bạn :D, xin lỗi nhé

Tài Nguyễn viết 20:13 ngày 30/09/2018

*p2 là giá trị chứ ,p2 ms là địa chỉ mak, e vẫn chưa hiểu *p2=NULL nghĩa là giá trị =O hay kn trỏ p2 trỏ về địa chỉ 0

Tran Huan viết 20:24 ngày 30/09/2018

Đây là định nghĩa NULL trong stdio.h (VC++ 9)

/* Define NULL pointer value */
#ifndef NULL
#ifdef __cplusplus
#define NULL    0
#else
#define NULL    ((void *)0)
#endif
#endif

Đối với C++ thì NULL là 0, với C thì NULL là (void *)0

Người bí ẩn viết 20:26 ngày 30/09/2018

Cho mình hỏi sao khi để NULL trong file.c của CodeBlocks thì nó không hiểu nhỉ ?
Mình phải để dòng #define NULL 0 ở đầu file.c nó mới hiểu, mặc dù đã #include <stdio.h>

Tran Huan viết 20:19 ngày 30/09/2018

có lẽ Implement của stdio.h không có định nghĩa NULL thôi bạn, thử #include <stddef.h> xem

https://en.wikibooks.org/wiki/C_Programming/C_Reference/stddef.h

Thân Hoàng viết 20:19 ngày 30/09/2018

1.Như mọi người nói int *p1 = NULL là cho p1 trỏ đến NULL chứ không phải p1 nhận giá trị là NULL.
Vậy tại sao khi in địa chỉ của p1 thì nó lại ra 0(NULL) ạ ?

2 Tại sao code này không in ra kết quả là true ạ

Theo cách giải thích của một thầy giáo: “giá trị mà phead trỏ tới có thể thay đổi, nhưng giá trị của phead (địa chỉ nó trỏ tới) không thay đổi được”. Như vậy suy ra, địa chỉ của phead là NULL chứ k phải nơi mà nó trỏ tới.

Nhưng em thấy cách giải thích này vẫn chưa thỏa đáng lắm, bởi vì khi khởi tạo một linked list thì sau khi tạo một node, người ta trỏ p->pnext = NULL; rồi lại cấp phát p->pnext = ()malloc() khi cần, như vậy nếu p->pnext = NULL là địa chỉ thì cũng không hợp lí.


Cảm ơn mọi người nhiều!!

rogp10 viết 20:14 ngày 30/09/2018

giá trị mà phead trỏ tới có thể thay đổi, nhưng giá trị của phead (địa chỉ nó trỏ tới) không thay đổi được

Đây là tính chất của truyền tham trị.

Như vậy suy ra, địa chỉ của phead là NULL chứ k phải nơi mà nó trỏ tới

Sai, do truyền tham trị nên không gán được.

Null có ý nghĩa gì ?
ví dụ con trỏ NULL thì khác với con trỏ chưa khởi tạo như thế nào
int *p1;
int *p2 = NULL;

free(NULL);, delete[] NULL; và delete NULL; (C++ gọi là nullptr) không có lỗi.

Thân Hoàng viết 20:26 ngày 30/09/2018

Vẫn chưa thỏa mãn được những câu hỏi của em.[quote=“hoangthan, post:18, topic:12808”]
.Như mọi người nói int *p1 = NULL là cho p1 trỏ đến NULL chứ không phải p1 nhận giá trị là NULL.
Vậy tại sao khi in địa chỉ của p1 thì nó lại ra 0(NULL) ạ ? <printf("%d",p1);>
[/quote]

Nhưng em thấy cách giải thích này vẫn chưa thỏa đáng lắm, bởi vì khi khởi tạo một linked list thì sau khi tạo một node, người ta trỏ p->pnext = NULL; rồi lại cấp phát p->pnext = ()malloc() khi cần, như vậy nếu p->pnext = NULL là địa chỉ thì cũng không hợp lí.

rogp10 viết 20:13 ngày 30/09/2018

p1 trỏ đến NULL chứ không phải p1 nhận giá trị là NULL.

Nói vậy là không rõ ý Thực chất hai chỉ là một: con trỏ NULL tức là nó trỏ vào NULL. Còn nội dung nó trỏ tới không phải NULL vì đâu phải con trỏ.

Bài liên quan
0