typedef数组的混合索引行为?

时间:2009-03-21 20:01:26

标签: c pointers typedef

我有一个typedef:

typedef unsigned char MyType[2];

我把它传递给一个函数,结果是失败!

void f(MyType * m)
{
*m[0] = 0x55;
*m[1] = 0x66;
}

void main(void)
{
Mytype a;
a[0] = 0x45;
a[1] = 0x89;

f(&a);
}

a中变量main()的操作适用于1字节索引,因此a等于{0x45,0x89}。但是在函数f中,索引作用于2个字节(sizeof类型)。

因此在函数f中,此实例中的*m[1]实际上是在修改内存超出范围。

为什么这样,我忘记了什么?

感谢。

2 个答案:

答案 0 :(得分:4)

尝试:

(*m)[1] 

而不是*m[1]

答案 1 :(得分:1)

啊,只是在放弃之后就解决了! Brackets Boy,Brackets。

void f(MyType * m)
{
(*m)[0] = 0x55;
(*m)[1] = 0x66;
}

void main(void)
{
Mytype a;
a[0] = 0x45;
a[1] = 0x89;

f(&a);
}