[英]What is the size of a structure pointer in C?
如果结构指针的大小为 4 或 8 字节,它如何在动态 Memory 分配中为其数据成员正确分配所需的 memory。 这是我的代码:
#include<stdio.h>
typedef struct node{
char a[10];
char b[10];
char c[10];
int f;
struct node* next;
}node;
int main()
{
node* temp;
int d= sizeof(node *);
printf("Size of structure pointer = %d",d);
temp= (node*)malloc(sizeof(node*));
int c = sizeof(temp);
printf("Size of Temp = %d\n",c);
}
```````````````````
/*
Here both Temp and node* is having a size of 8 bytes.
But the size of the structure 'node' is 38 bytes(total size of the members).
So how can the pointer Temp allocate that much memory if its size is just 8 bytes ?
*/
因为您不将数据存储在指针中。 指针指向在别处分配的数据,因此得名“指针”。 sizeof(node*)
是错误的,指针本身的大小无关紧要。
你应该做
temp = malloc(sizeof *temp); // equivalent of sizeof(Node)
...
free(temp);
这是指向节点结构的指针,您不需要为它分配空间。 它可以指向节点结构。
struct node *node_ptr;
如果要在某个指针处存储节点结构,则需要为节点结构分配空间而不是指针
node *node_data = malloc(sizeof(struct node));
您不需要从 malloc 转换结果,这很糟糕{请参阅malloc 的转换}
指针只是指针。 如果你是战争博物馆的导游,用指针显示坦克——你手中的指针重量是多少? 木棍的重量还是坦克的重量?
首先让我们了解一下 malloc:Malloc 是一个 function,它在 HEAP6 中分配 ZCD69B4957F06CD818DZ19 部分的 ZCD69B4957F06CD818DZ7BF3D6 如果我们定义一个变量,通常它会被分配到 RAM 的 STACK 部分。
temp = (int*)malloc(n*sizeof(int));
此代码在 HEAP 中分配了一个 memory。
现在让我们了解一下 ponters:考虑以下代码。
int a;
int *p;
p=&a;
在 about 代码行中,指针“p”存储变量“a”的地址。 根据系统的字长(32 位或 64 位),指针变量“p”的大小会发生变化。 它可以是 2 字节或 4 字节或 8 字节。 8bytes 是因为在 64 位机器中,“long int”可以占用 8bytes。
现在让我们了解两个具有结构的指针:
struct value{
int a;
int b;
char c;
};
由于上述代码是结构体的定义,memory 不会被分配。
struct value s;
现在 memory 在堆栈中分配。
struct value *s;
s = (struct value*)malloc(sizeof(struct value));
这里 memory 在堆中分配。 即使's'是结构指针,它仍然存储整个结构'value'的地址,它的大小将是4/8。 它指向整个结构而不是结构的特定成员。
一般结构“s”将包含其所有成员的数据部分。 因此,大小将是 5 或 9,具体取决于机器和填充物。
struct s{
int a; /* 4 bytes */
char b; /* 1 byte */
/* 1 padding byte */
short c; /* 2 bytes */
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.