加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C99指向结构的指针,该结构包含指向结构的指针

发布时间:2020-12-16 09:43:10 所属栏目:百科 来源:网络整理
导读: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.xrp-pt1.x(r.pt1).x(
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

其被描述为“指特定成员”.

我将连字符改为下划线,以确保我们不会混淆
一个减号.

太棒了,我可以看到我们将其称为嵌套结构,因为
struct rect包含一个struct point.

那么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就好了.我甚至得到了我的嵌套
struct timespec node_head-> tv很好.

什么是真正的问题是试图弄清楚如何设置内部tv.sec
像some_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,我看到书中的例子没有
有一个指向struct rect中结构的指针.

我已经使用反复试验来获得我想要的东西,但这令人抓狂.
我可以创建一个类型为“struct timespec temp”的临时变量然后
设置temp =& node_head.tv …但是没有…那将无效.那就是
更糟糕的是我想.

我在这里错过了什么?

答案是微不足道的,当然,只需使用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
}

效果很好.显然,我需要咖啡.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读