【发布时间】:2019-07-26 19:19:20
【问题描述】:
考虑以下 3D 矩阵
char ShapesArray[2] = {
(char[4][4]){
{ 0, 1, 0, 0 }, //I
{ 0, 1, 0, 0 },
{ 0, 1, 0, 0 },
{ 0, 1, 0, 0 }
},
(char[3][3]){
{ 0, 1, 0 }, //J
{ 0, 1, 0 },
{ 1, 1, 0 }
}
};
通过使用
int i = sizeof(ShapesArray[0]));
我希望结果为 16。
但是这种情况下的结果是:1
我在这里错过了什么?
【问题讨论】:
-
char ShapesArray[2]正在定义一个由两个char元素组成的一维数组。 -
你的编译器应该抛出一些关于多余初始化器的警告
-
MSVC 生成 两个 'initializing' 警告:'char' 在间接级别上不同于 ... 和 一个 错误 COFF 格式不能用地址的 1 个字节静态初始化 '_ShapesArray'。 但是数组
char ShapesArray[2]应该有两个char元素所以sizeof(ShapesArray[0])(一个关闭括号)是1,所以这部分是正确的。 -
我认为这里不能使用静态的
sizeof。我会用size_t size_x, size_y;定义一个struct -
尝试编译器选项
-Wall
标签: c