01/10/2018, 00:03

Giải đáp thắc mắc

struct OLK//OLK chứa giá trị nguyên và OLK nối với nhau
{
	int GT;
	OLK *Next;
};

......

OLK *TaovGan(int gt)//trả về địa chỉ kiểu cấu trúc
{
	OLK *t=new OLK;//cấp phát 1 ô nhớ hay trỏ tới địa chỉ của (OLK cấu trúc) -> tạo 1 ô gồm GT và next nhưng ô để chống
	if(t==NULL)//t lúc này có giá trị là địa chỉ của OLK !=NULL
	{
		return NULL;
	}
	t->GT=gt;
	t->Next=NULL;
	return t;
}//trả về địa chỉ

cho mình hỏi con trỏ chỉ chứa giá trị là địa chỉ khi gán thì phải có & tên biến,vậy tại cái dòng OLK *t=new OLK sao lại ko cần & >>mình có thắc mắc là “kiểu cấu trúc nó mặc định là địa chỉ rồi hay sao” hay là do cấp phát động nó cho mình 1 ô địa chỉ mới >> “new = &” ?

viết 02:04 ngày 01/10/2018

OLK *t=new OLK;

new OLK sẽ tạo trên Heap một vùng nhớ có kích thước sizeof(OLK) bytes, nếu thành công sẽ trả về địa chỉ của vùng nhớ được cấp hoàn toàn thỏa mãn với OLK* t (t chứa địa chỉ), nếu không thành công thì một exception (std::bad_alloc) sẽ được ném ra. Để t==NULL (nếu cấp phát thất bại) thì bạn sửa lại một tí:
OLK* t = new (std::nothrow) OLK;
Link tham khảo: http://en.cppreference.com/w/cpp/memory/new/operator_new

Bài liên quan
0