30/09/2018, 19:39

Khởi tạo mảng trong c++

em có đọc dc một đoạn code thế này nhưng không hiểu ý nghĩa nó là thế nào???

struct XeTang
{	
	_hd[3][3];
	char (*hinhDang)[3];
};

xeTang.hinhDang = (char(*)[3])((char*)&xeTang._hd[1] + 1);

em không hiểu mình khai báo như thế thì nó có nghĩa là gì ạ ?? mong anh chị giúp …

*grab popcorn* viết 21:54 ngày 30/09/2018

char(*)[value]
= 1 con trỏ, trỏ tới mảng char gồm 3 phần tử

char(*a)[3] = &b
b++ = b[1]
mà a++ != b[1]

Mà cái này theo mình biết rất ít người dùng ._.
Chắc ai code cái này muốn obfuscate code?

Phan Thành Nam viết 21:49 ngày 30/09/2018

obfuscate code nghĩa là gì anh ??

*grab popcorn* viết 21:49 ngày 30/09/2018

Cứ hiểu là làm rối code.
Làm hco người khác đọc thấy ko thể hiểu đc mình viết gì.

Phan Thành Nam viết 21:48 ngày 30/09/2018

à mà dòng char(*a)[3] = &b; thì có phải nó trỏ vào mảng b ??
thế thì a[0] = b[0] … nhưng tại sao a[1] != b[1] ?? có phải cái mà a trỏ vào thực chất chỉ là phần tử đầu tiên của mảng b ??

*grab popcorn* viết 21:49 ngày 30/09/2018

Cái này nói thật là hơi khó giải thích ._.

Nó ko trỏ vào phần tử đầu tiên của mảng b.
Mà nó trỏ vào địa chỉ của “biến” mảng b.
Ta biến, 1 b iến thì có 2 phần, địa chỉ và giá trị
int a = 1;
-> &a = lấy địa chỉ
-> a = lấy giá trị

Thì mảng là đc xem 1 biến con trỏ. (Thực chất ko phải là con trỏ)
Mảng đặc biệt hơn con trỏ ở chỗ là địa chỉ nó trỏ tới = địa chỉ ô nhớ của nó đang nằm luôn.
tức nếu
int a[30];
thì &a = &a[0] = a; (*)
và *a = a[0]
(*): Điều này ko xảy ra khi bạn cấp phát động.

Ta có 1 con trỏ int (*p)[30] = &a;
tức p đang đang lưu trữ giá trị là địa chỉ của biến a.
-> p = &a
*p = &(a[0])
*(*p) = a[0]

Và lưu ý, nhìn mớ trên thì có vẻ char(*p)[] khá giống pointer to pointer. Nhưng thực chất thì nó ko phải đâu nhé.
array != pointer and pointer != array;

Gió viết 21:54 ngày 30/09/2018

Code bị lỗi. _hd[3][3] có kiểu dữ liệu là gì?

Bài liên quan
0