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;
Bài liên quan
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;
NULL
tương đương với0
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.Vậy bất cứ khi nào khởi tạo tất cả con trỏ đêu trỏ về 0 ?
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
*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)
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.
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ị.
trong dslk NULL không phải là nút cuối hả p
Null không phải là nút cuối, mà là nút cuối trỏ next tiếp theo sẽ là null
vậy theo p nói vậy null mặc định nó không bằng 0
Mình có nói nó là nút cuối bao giờ đâu
Ý bạn là sao? Nút cuối liên quan gì
Oh, mình quote nhầm của bạn nhuyngo_nhuyngo95 thành của bạn :D, xin lỗi nhé
*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
Đây là định nghĩa NULL trong stdio.h (VC++ 9)
Đối với C++ thì NULL là 0, với C thì NULL là (void *)0
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>
có lẽ Implement của stdio.h không có định nghĩa NULL thôi bạn, thử
#include <stddef.h>
xemhttps://en.wikibooks.org/wiki/C_Programming/C_Reference/stddef.h
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!!
Đây là tính chất của truyền tham trị.
Sai, do truyền tham trị nên không gán được.
free(NULL);, delete[] NULL; và delete NULL; (C++ gọi là
nullptr
) không có lỗi.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]
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ỏ.