【发布时间】:2011-01-14 11:38:45
【问题描述】:
如何编写包含数组的结构
#include <iostream>
#include <cstdio>
typedef struct {
int ref;
double* ary;
} refAry;
void fillit(double *a,int len){
for (int i=0;i<len;i++) a[i]=i;
}
int main(){
refAry a;
a.ref =10;
a.ary = new double[10];
fillit(a.ary,10);
FILE *of;
if(NULL==(of=fopen("test.bin","w")))
perror("Error opening file");
fwrite(&a,sizeof(refAry),1,of);
fclose(of);
return 0;
}
test.bin 的文件大小是 16 字节,我猜是 (4+8) (int + double*)。文件大小应为 4+10*8 (im on 64bit)
~$ cat test.bin |wc -c
16
~$ od -I test.bin
0000000 10 29425680
0000020
~$ od -fD test.bin -j4
0000004 0,000000e+00 7,089709e-38 0,000000e+00
0 29425680 0
0000020
谢谢
【问题讨论】:
-
您似乎在编写纯 C,但是包含
是什么意思? -
new不在我来自的 C 语言中...... -
和
new没有匹配的delete? -
那仍然是 C++。糟糕的 C++,但仍然是 C++。
-
实际上文件大小应该是 (8 + 10 * 8) 而不是 (4 + 10 * 8),假设您更正代码以写入内存中表示的数组。由于您在 64 位平台上,因此指针的大小为 64 位。您的结构成员将在 8 字节边界上对齐,因为您的指针大小大于 int 的大小。这意味着您的 int 成员和指针之间将有 4 个字节的填充,这就是为什么您的结构的大小是 16,而不是 12。