Không hiểu code stack trong sách

Chào mọi người, em đọc sách có đoạn code cài đặt ngăn xếp như thế này, nhưng vẫn chưa hiểu dòng Void* Buf=malloc(sizeof(ArrayImp)) và dòng imp =(ArrayImp*)Buf, để làm gì ạ, sao không cấp phát cho imp luôn ạ.

#include <iostream>
using namespace std;
typedef struct {
	void *Arr[100];
	int nItem;
}ArrayImp;
void* initStack() {
	ArrayImp *imp = NULL;

	void* Buf = malloc(sizeof(ArrayImp));
	imp = (ArrayImp*)Buf;

	if (imp != NULL)
		imp->nItem = 0;
	return imp;
}

Format lại code bạn ơi. Thêm 3 dấu ` vào đầu và cuối code.

cám ơn bạn, bạn có thể giải thích giúp mình thắc mắc đó được không ??? :((

Đáng lí ra phải #include <cstdlib> nhưng thật tình thì phải chuyển qua new vì nó ít lỗi hơn.

Thực ra dòng 2 không cần cast đâu.

chắc sách người ta viết rõ ràng ra đó mà, thay vì viết 3 dòng thành 1 dòng.

ArrayImp *imp = NULL;
void* Buf = malloc(sizeof(ArrayImp));
imp = (ArrayImp*)Buf;

ArrayImp *imp = (ArrayImp*)malloc(sizeof(ArrayImp));

Con trỏ imp ban đầu ko trỏ tới đâu hết, nên nó có giá trị NULL. malloc(n) cấp phát và trả về con trỏ tới vùng nhớ n bytes, con trỏ này ko biết trỏ tới kiểu dữ liệu gì nên nó là void *. buf là biến tạm thời chứa con trỏ này. Sau đó con trỏ này mới được hiểu là con trỏ trỏ tới ArrayImp thông qua dòng thứ 3 và gán cho imp. Viết 1 dòng chắc sợ người mới học code khó hiểu?

1 Like

cám ơn bạn nha, mình hiểu rồi

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?