sách gpt4 ăn đã đi

c - C 结构中 char* 和 char [] 的区别

In lại 作者:太空狗 更新时间:2023-10-29 16:01:41 25 4
mua khóa gpt4 giày nike

当我想在C结构中存储动态数据数组时,有两种写法:

Kiểu định nghĩa cấu trúc {
int row;
int col;
char* data;
} item1;

hoặc

Kiểu định nghĩa cấu trúc {
int row;
int col;
char data[];
} item2;

两者都可以。但是他们在我的 64 位 Mac OSX 上有一些不同,gcc Apple LLVM 版本 5.1 (clang-503.0.38):

      sizeof(item1) is 16
sizeof(item2) is 8

为什么不同?并且,这两种实现方式还有哪些不同之处?

完整的测试代码是:

#include 

Kiểu định nghĩa cấu trúc {
int row;
int col;
char* data;
} item1;


Kiểu định nghĩa cấu trúc {
int row;
int col;
char data[];
} item2;


int chính() {
printf("%d %d\n", sizeof(item1), sizeof(item2));
trả về 0;
}

Đầu ra là:

16 8

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

指针的大小是machine specific (无论是 32 位还是 64 位)。结果在 32 位机器上分别是 128 字节。对于 64 位机器,答案将是 168 字节。
看解释

Kiểu định nghĩa cấu trúc {
int row; // 4 bytes
int col; // 4 bytes
char* data; // 4/8 bytes on 32/64-bit machine
}item1 ;

在 32/64 位机器上总大小 = 12/16 字节。

Kiểu định nghĩa cấu trúc {
int row; // 4 bytes
int col; // 4 bytes
char data[]; // 0 bytes --> Flexible array
}item2 ;

总大小 = 8 个字节。

为什么灵活数组的大小是0?

C11: 6.7.2.1 (p18)

[...] In particular, the size of the structure is as if the flexible array member were omitted [...]

关于c - C 结构中 char* 和 char [] 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24381554/

25 4 0
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