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 …
Bài liên quan
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?
obfuscate code nghĩa là gì anh ??
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ì.
à 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 ??
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;
Code bị lỗi. _hd[3][3] có kiểu dữ liệu là gì?