3

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

  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指针可以采用新创建的指针地址以外的值struct吗?

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

4

2 回答 2

1

不能保证将字符数组的地址分配给结构指针,可能存在对齐问题。一些体系结构只允许ints 在偶数地址上对齐,而字符数组通常可以从任何地址开始。

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

这两个问题都可以通过改变来解决

char buffer1[256];

char *buffer1 = (char*)malloc(sizeof Table);
于 2012-08-28T14:17:01.643 回答
0

不,这不好。

演员表

Table* tableptr = (Table*)buffer1; 

只是告诉编译器“闭嘴,做吧!”。它不会神奇地让它工作,它只是让编译器不会抱怨它。

于 2012-08-28T14:14:44.910 回答