可以将字符数组的地址提供给struct指针吗?

  typedef struct {
  int ID;
  word32 Myports;
  stripports gd[256] ;
  }Table;

  typedef struct {
  oldxmd used;
  newip  ip;
  newxmd new;
  }stripports;

  char buffer1[256];

  Table *tableptr = buffer1 ;

  tableptr ->ID = 15 ;
  tableptr ->Myports= somenumber ;
  tableptr ->gd[0].used = somenumber ;


困难的部分是我无法说明为什么tableptr会接受数组的起始地址!
我最好的选择是上述代码不正确或不安全。

尽管稍后采用了强制转换,但是为什么要接受数组呢?

 Table* tableptr = (Table*)buffer1;


在随后的许多测试中,Table *tableptr = buffer1 ;Table* tableptr = (Table*)buffer1;取代。

如果不进行强制转换,struct指针能否采用除新创建的pointee struct的地址以外的值?

我在存储库中有许多作者编写的一系列测试,这确实令人困惑。

最佳答案

不能保证将字符数组的地址分配给结构指针,否则可能会出现对齐问题。
某些体系结构仅允许int在偶数地址上对齐,而字符数组通常可以在任何地址开始。

还有缓冲区溢出问题。如果Table类型大于字符数组,则最终可能会覆盖其他变量或出现内存保护错误。

这两个问题都可以通过改变来克服

char buffer1[256];




char *buffer1 = (char*)malloc(sizeof Table);

09-25 18:50