微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

分配给自引用结构指针的大小是多少

如何解决分配给自引用结构指针的大小是多少

struct node 
{ 
    int data1; 
    int data2;
    struct node* link; //line 5
};

第5行将分配多少内存,由于它指向的是具有两个单独的整数,因此它将是1个内存块还是2个内存块。

请帮助我混淆自引用指针的内存分配。

解决方法

在标准C ++中,对象指针的大小始终相同,无论所指向的对象包含什么。大小因系统而异,但是根据经验,在64位程序上,指针是64位,在32位程序上是32位,...希望您能得到这种模式。

一个类似的例子是建筑物的地址。建筑物的大小不会影响建筑物的地址大小。

,

其中有2个内存,一个是用于在结构体中存储指针的内存,另一个是结构体所指向的内存。

结构体中指针本身的大小为sizeof(struct node*),通常为长整型或8个字节(可能不是那样,请检查您的系统)。

将不为指针分配内存。它可能指向nullptr /0。您负责通过malloc,new或任何其他分配机制分配该内存。

,

指针链接的类型为struct node *。因此,从逻辑上讲,显然指针将指向类型为struct node的对象。因此,指针所指向的已分配内存范围将等于sizeof( struct node )

尽管通常您可以分配类型为struct node的对象数组,该对象的第一个元素将由指针指向。:)在这种情况下,内存范围将等于{{1} },其中N * sizeof( struct node )是分配的数组中的元素数。

另一方面,由于指针是结构的数据成员,因此它将占据为N类型的对象分配的内存范围的一部分。通常,根据所使用的系统,指针的大小等于4或8个字节。

这是一个演示程序。

struct node

程序输出为

#include <stdio.h>

struct node 
{ 
    int data1; 
    int data2;
    struct node* link; //line 5
};

int main(void) 
{
    printf( "sizeof( struct node ) = %zu\n",sizeof( struct node ) );
    printf( "sizeof( link ) = %zu\n",sizeof( struct node * ) );
    
    return 0;
}

或者说明性程序可以如下所示。

sizeof( struct node ) = 16
sizeof( link ) = 8

该程序的输出类似于上一个程序的输出

#include <stdio.h>

struct node 
{ 
    int data1; 
    int data2;
    struct node* link; //line 5
};

int main(void) 
{
    struct node obj;
    
    printf( "sizeof( obj ) = %zu\n",sizeof( obj ) );
    printf( "sizeof( obj.link ) = %zu\n",sizeof( obj.link ) );
    
    return 0;
}

即类型为sizeof( obj ) = 16 sizeof( obj.link ) = 8 的对象的大小等于struct node,而其数据成员16的大小等于8。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。