可以将字符数组的地址提供给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);