【发布时间】:2020-06-01 21:14:08
【问题描述】:
我遇到了这个 sn-p 代码,发现它设法打印 5 非常奇怪。我不明白为什么转换为 int* 设法使其基本上成为一个一维数组。谁能解释一下?
int main()
{
int v[2][3] = {{1,2,3},{4,5,6}};
int* c = (int*)v;
printf("%d\n", c[4]);
}
【问题讨论】:
-
这个程序有未定义的行为。
v不是指向int的指针,并且与其中不兼容。该程序似乎可以做任何事情。 -
@n.'pronouns'm。具有不兼容的类型并不排除强制转换是有效的
-
@M.M 演员表本身是有效的,随后的取消引用是无效的。
-
@n.'pronouns'm。我同意超出前 3 个元素的访问存在问题,但我认为访问第一行是明确定义的。我们可以从转换规则中推断出转换的结果指向第一个 int 的相同内存位置,并且取消引用指向 int 的
int *是明确定义的
标签: c arrays pointers multidimensional-array casting