【发布时间】:2019-01-03 21:47:23
【问题描述】:
我有下面的代码,我看到这两个变量被分配了相同的地址。这两个变量是完全不同的类型。无论如何我可以取消这个吗?以及在什么情况下,两个变量会分配相同的内存。
static int Sw_Type [];
static BOOL Sw_Update;
void main()
{
int i;
int bytes = 3;
if (Sw_Update!= TRUE)
{
for(i = 0; i< bytes ;i++)
{
Sw_Type [i] = *Ver_Value;
Ver_Value++;
}
Sw_Update= TRUE;
}
}
这是我的代码的 sn-p,“Ver_Value”是分配给不同功能的结构。
所以我看到的问题是,当 Sw_Update 更新时,Sw_Type [1] 正在更新,我看到这两个具有相同的内存地址。
【问题讨论】:
-
您认为分配了多少内存:
static int Sw_Type [];? -
空数组在 C 中是非法的。
-
@EugeneSh.:显示的代码中没有空数组。有一个不完整类型的数组。 (本来可以完成的。)
-
for循环的限制是3。因此,它使用 0-2 范围内的数组索引值。但是,您的数组只定义了一个元素。你想要:static int Sw_Type [3];但是,如果你增加bytes,你需要相应地调整数组。这不是一个很好的方法。 (例如)您最好在数组上方使用#define bytes 3,然后:static int Sw_Type [bytes]; -
@chux:Clang 可以稍后完成。我不确定 6.9.2 3 是打算应用于每个声明,还是应用于翻译单元末尾的已解析复合类型。
标签: c arrays static memory-address