C99指向结构的指针,该结构包含指向结构的指针
K& R“The C Programming Language”第2版在第131页上给出了a
因此,变量集合: struct rect r,*rp = &r; 其中: struct rect { struct point pt1; struct point pt2; }; 和 struct point { int x; int y; } 然后这四个表达式是等价的: r.p1.x rp->pt1.x (r.pt1).x (rp->pt1).x 在同一页面的早些时候,我们看到: p->member_of_structure 其被描述为“指特定成员”. 我将连字符改为下划线,以确保我们不会混淆 太棒了,我可以看到我们将其称为嵌套结构,因为 那么rect的定义是什么,pt1和pt2都是指针 这是我用以下代码位来解决问题的地方: typedef struct some_node { struct timespec *tv; struct some_node *next; } some_node_t; 显然我会在这里制作一个链表,这没问题. 这是一个非常大的问题: struct timespec some_tv; clock_gettime( CLOCK_REALTIME,&some_tv ) /* set up the head node */ struct some_node *node_head = ( struct some_node * ) malloc( sizeof( some_node_t ) ); node_head->tv = calloc ( (size_t) 1,sizeof ( struct timespec ) ); 这一切都很好,我得到的node_head就好了.我甚至得到了我的嵌套 什么是真正的问题是试图弄清楚如何设置内部tv.sec ((struct timespec *)(*node_head.tv)).tv_sec = some_tv.tv_sec; 我收到一个错误: line 22: error: left operand of "." must be struct/union object 所以我正在寻找K& R,我看到书中的例子没有 我已经使用反复试验来获得我想要的东西,但这令人抓狂. 我在这里错过了什么? 答案是微不足道的,当然,只需使用foo-> bar-> here语法. 修改代码以删除malloc上的强制转换并使用正确的语法: /* set up the node list */ struct some_node *node_head = calloc( (size_t) 1,sizeof( some_node_t ) ); node_head->tv = calloc ( (size_t) 1,sizeof ( struct timespec ) ); node_head->tv->tv_sec = some_tv.tv_sec; node_head->tv->tv_nsec = some_tv.tv_nsec; node_head->next = NULL; 调试器确认了这一点: (dbx) print *node_head *node_head = { tv = 0x1001453e0 next = (nil) } (dbx) print *node_head.tv *node_head->tv = { tv_sec = 1363127096 tv_nsec = 996499096 } 效果很好.显然,我需要咖啡. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |