cuốn sách gpt4 ai đã làm

Cấu trúc căn chỉnh trong một liên kết có thể được chuyển thành một liên kết để truy cập vào các trường căn chỉnh không?

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 06:21:35 27 4
mua khóa gpt4 Nike

Tôi đang cố gắng tìm hiểu những gì bạn nhận được từ việc dễ dàng sắp xếp các biến trong C99:

Ngoại lệ đối với quy tắc đặt bí danh nghiêm ngặt trong C từ 6.5.2.3 Cấu trúc và thành viên liên minh

Nếu việc ghi thô được thực hiện thông qua một con trỏ tới một trong các cấu trúc được căn chỉnh như bên dưới, nó có cung cấp cho bạn toàn quyền để truyền tới liên kết đó không?

#include 
#include

struct Foo { char t;

thanh struct { char t;

công đoàn FooBar {
struct Foo foo;
cấu trúc thanh Bar;
};

máy dò khoảng trống (union FooBar *foobar) {
if (((struct Foo*)foobar)->t == 'F')
printf("Foo %d\n", ((struct Foo*)foobar)->i);
khác
printf("Thanh %f\n", ((struct Bar*)foobar)->f);
}

int chính() {
struct Foo *foo = (struct Foo*)malloc(sizeof(struct Foo));
struct Bar *bar = (struct Bar*)malloc(sizeof(struct Bar));

foo->t = 'F';
foo->i = 1020;
detector((union FooBar*)foo);

thanh->t = 'B';
thanh->f = 3,04;
máy dò ((union FooBar*)bar);

return 0;
}

Lưu ý rằng trong cuộc gọi thứ hai,t được viết là "thanh t" Nhưng sau đó để biết đó là loại nào, máy dò sẽ đọc nó là"foo's t"

Phản ứng của tôi với C++ là bạn chỉ có thể thực hiện việc này bằng cách "trước tiên chỉ định nó là liên kết FooBar". Đối với tôi, thật trái ngược khi nghĩ rằng điều này là hợp pháp, nhưng đối với phân bổ động trong C thì không có điều đó. Vì vậy, nếu bạn không thể làm điều đó, chính xác thì bạn có thể làm gì với việc cấp phát bộ nhớ động ở trên theo ngoại lệ này?

câu trả lời hay nhất

Nếu bạn đã làm một cái gì đó như thế này:

struct Foo foo;
cấu trúc thanh Bar;
...
detector((union FooBar*)&foo);
detector((union FooBar*)&bar);

Sau đó, bạn có thể gặp phải các vấn đề về căn chỉnh vì trình biên dịch có thể đặt từng cấu trúc này vào ngăn xếp theo cách có thể không căn chỉnh chính xác cấu trúc kia.

Nhưng vì trong trường hợp của bạn, bạn đang phân bổ bộ nhớ động cho từng cấu trúc nên việc căn chỉnh không phải là vấn đề.

từ malloc Trang dành cho người đàn ông dành cho:

calloc() and malloc(), giá trị được trả về là một con trỏ tới bộ nhớ được cấp phát, được căn chỉnh phù hợp cho bất kỳ loại biến nàohoặc NULL nếu yêu cầu không thành công.

Nhưng nếu bạn muốn đảm bảo điều này không thành vấn đề, chỉ cần khai báo một thể hiện của hợp thay vì cấu trúc chứa ở bất cứ nơi nào bạn gọi một hàm yêu cầu hợp.

Về việc liệu có thể chuyển cấu trúc căn chỉnh trong một liên kết thành một liên kết để truy cập vào các trường căn chỉnh hay không? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/33917674/

27 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress