01/10/2018, 10:06

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;
}
HK boy viết 12:22 ngày 01/10/2018

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

Hoang Le viết 12:21 ngày 01/10/2018

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

rogp10 viết 12:06 ngày 01/10/2018

Đá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.

viết 12:19 ngày 01/10/2018

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?

Hoang Le viết 12:12 ngày 01/10/2018

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

Bài liên quan
0