问题描述
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。