我有2个结构如下(Widget
,Pixmap
是 XWindow 对象):
typedef struct {
unsigned short id;
short valid;
time_t mtime;
} MyEntry;
typedef struct {
Widget shell;
Pixmap icon;
int nentry;
MyEntry entry[100];
} CoverList;
然后我创建了一个CoverList
对象;
CoverList list;
问题是当我尝试获取MyEntry
指针时,它总是出错。我尝试获取的指针的地址小于原始指针4.例如,假设list.entry
指向0x500004,则MyEntry* ent = &list.entry[0]
指向0x500000。
MyEntry* ent = &list.entry[0]; // <= always wrong
因此,我无法访问该对象的任何内容。我想知道我的代码中有什么问题,以及如何修复它?
更新 我尝试使用3种方法来分配该数组,但都给了我错误的结果:
MyEntry ent1 = list.entry[0];
MyEntry *ent2 = &list.entry[0];
MyEntry ent3;
memcpy(&ent3, &list.entry[0], sizeof(MyEntry));
答案 0 :(得分:-1)
使用括号:
MyEntry* ent = &(list.entry[0]);
没有括号,编译器的代码如下所示:
MyEntry* ent = (&list).entry[0];
编辑:忽略我上面写的内容。
您的代码(经过一些修改)在我的系统上正常运行:
#include <time.h>
#include <stdio.h>
typedef struct {
unsigned short id;
short valid;
time_t mtime;
} MyEntry;
typedef struct {
int nentry;
MyEntry entry[100];
} CoverList;
int main()
{
CoverList list;
MyEntry* ent = NULL;
list.entry[ 0 ].id = 0;
list.entry[ 1 ].id = 1;
list.entry[ 2 ].id = 2;
list.entry[ 3 ].id = 3;
ent = &list.entry[0];
printf("%u\n", ent->id); // prints 0
return 0;
}