【问题标题】:Mixed indexing behaviour for typedef array?typedef数组的混合索引行为?
【发布时间】:2009-03-21 20:01:25
【问题描述】:

我有一个 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);
}

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

所以在函数f 中,*m[1] 在这种情况下实际上是在越界修改内存。

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

谢谢。

【问题讨论】:

    标签: c pointers typedef


    【解决方案1】:

    试试:

    (*m)[1] 
    

    而不是*m[1]

    【讨论】:

      【解决方案2】:

      啊放弃后才解决!括号男孩,括号。

      void f(MyType * m)
      {
      (*m)[0] = 0x55;
      (*m)[1] = 0x66;
      }
      
      void main(void)
      {
      Mytype a;
      a[0] = 0x45;
      a[1] = 0x89;
      
      f(&a);
      }
      

      【讨论】:

      • 为什么首先要使用 typedef? (*m)[0] 很丑。
      • 我正在为嵌入式应用程序开发 API,并尝试使用 typedef 数组作为公共接口的编程提示数组大小,而不是在阅读文档或使用 Eclipse 之类的 IDE 后回复它们在开发时通知。所以不整洁只是在入口处。
      • 现在在这里看到这个问题有点尴尬 - 有点沮丧/愚蠢 - 无论如何我尝试过并认为这不是一个好主意。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-08
      • 1970-01-01
      • 1970-01-01
      • 2016-07-12
      • 1970-01-01
      • 2017-09-14
      相关资源
      最近更新 更多