gpt4 book ai didi

c - 在类型转换为不同类型后访问数组时出现段错误

转载 作者:行者123 更新时间:2023-12-05 00:13:11 24 4
gpt4 key购买 nike

所以我知道你可以这样做:

 char c[4];
int *p;

p = (int*)c;
p[0] = 1;

一次设置所有字符值。但我更进一步,做了:

char c[1][4];
int **p;

p = (int**)c;
p[0][0] = 1;

它会出现段错误。有人可以解释为什么会这样吗?

最佳答案

您在第一个示例中很幸运:某些 CPU 上的对齐约束(例如:在旧版 68000 上)可能会立即出现段错误...更不用说由于字节序问题导致代码不可移植。

也就是说,c[1][4] 不是指针数组。它是一个二维数组(4 字节存储)。因此,像您正在做的那样取消引用它两次肯定会失败(尽管您以前的技术可能“有效”)。

像这样对编译器说谎并不是一个真正的选择。另请注意,int 不保证为 4 个字节长,因此最好使用标准化类型,如 uint32_t(来自 stdint.h )

要更快地设置数据,可以使用memcpy,例如:

uint32 v = 1;
memcpy(c,&v,sizeof(v));

关于c - 在类型转换为不同类型后访问数组时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46399518/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com