[英]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.