C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?

翻译 2017年07月15日 14:24:33
C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?


问题1:结构体指针最开始怎么分配内存?用sizeof()是不能确定大小的。


问题2:给结构体变量分配之后,是否还要给每个成员分配,还是只给不能确定大小的成员分配?


问题3:如果是要每个成员分配内存,那么释放的时候是不是每个成员都要单独释放?指针加一之后,又怎么做?



C\C++中结构体变量与结构体指针内存分配问题?


(1)声明一个结构体变量,无论是否初始化,都开辟内存,声明一个结构体指针变量,对其初始化的时候才会开辟内存。


(2)结构体变量分配结构体本身大小的空间,结构体指针分配4个字节,其实任何类型的指针都是分配四个字节的指针空间。


(3)所以:
     A a[3]; //a里面是三个A变量,所以分配三个结构体大小
     A *a;  //a是一个指针,分配4个字节,就算A再大,a也只是4个字节,因为任何类型的指针都是4个字节。要使用a,必须先要对指针初始化,也即分配空间了。
     如:
     A *a;
     a = (A*)malloc(sizeof(A));


(4)我们完全可以撇开结构体,把问题简单化成int类型来说明这个指针问题:
int a1[10];
int *a2;


1)a1是包含10个int的数组,大小也就是10*sizeof(int)。直接使用a1不要在进行什么初始化或者分配空间的游戏,因为数组a1里面本身存放的就是int变量本身了。


2)a2是一个int*的东西,也就是整型指针,a2不能存放int变量,它只能存放一个int变量的地址。如果要使用a2,必须首先对a2初始化,即将它指向一个int变量的地址,如:a2 = (int*)malloc(sizeof(int));
或者
int i = 10;
a2 = &i;
所以,malloc函数的作用是首先声明一个变量,然后返回该变量的地址。
所以:a2 = (int*)malloc(sizeof(int)) 的含义就是把该变量的地址赋值给a2,和a = &i 本质上并没有什么不同,只是一个变量是栈上,一个是堆上,都是一个地址赋值。


(5)所以,所谓的分配空间,就是对指针赋值,把一个变量的地址赋值给一个指针。

对于结构体,什么时候分配内存以及为什么选择用malloc函数来分配结构体变量的地址

我们都知道结构体的定义: struct Node{     int score;     int age;     char sex; }sqlist; 这样一组结构体定义。 那先说说C语言中定义和...
  • tongjinrui
  • tongjinrui
  • 2017年04月02日 09:43
  • 1541

结构体定义、结构体指针、内存分配、指针、结构体形参的深入理解

/*********结构体定义、结构体指针、内存分配、指针、结构体形参的深入理解****  作者: 攀枝花学院 袁伟明  邮箱:1040185409@qq.com  说明:此程序为深入学习数据结...
  • yuanweiming1992
  • yuanweiming1992
  • 2015年02月25日 23:17
  • 3147

定义结构体与分配内存

这几天在学习数据结构的时候经常会出现一个问题,就是定义了节点的结构,然后定义了指向节点的指针,但是已经定义了指针为什么就不能直接用呢,后来查了一下相关资料发现原来在新建指针的时候不会一同分配内存给他,...
  • lafengxiaoyu
  • lafengxiaoyu
  • 2016年11月04日 11:20
  • 2968

C语言中结构体内存分配问题解析。

分析了编译器对结构体内存空间的分配
  • u011321908
  • u011321908
  • 2015年03月25日 10:40
  • 854

C语言结构体分配内存问题

有些c语言的题很小,但是我们往往会忽略掉,面试的时候就会出这样的题比如,写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的变量总长度要大,这是怎么回...
  • u010343083
  • u010343083
  • 2014年03月18日 15:34
  • 727

C语言结构体内存空间分配

首先来说如果结构体的内存是按照便捷对齐的话,比如下图的这个结构体: 假如按照边界对齐要求的话,恐怕需要24个字节的存储空间。而short类型和charl类型却仅仅占了不到一个double八个...
  • w13460218091
  • w13460218091
  • 2015年12月29日 21:15
  • 1551

C\C++中结构体变量与结构体指针内存分配问题

A a[3];  a是A型的,有3个,当然分配A乘3大小的空间 A* a;    a是A*型的,当然只分配A*大小的空间,而不会分配A大小的空间 好像跟你说的不太一样,结构体数组的话,我在课本里看到...
  • SMF0504
  • SMF0504
  • 2016年08月15日 13:49
  • 2144

C-C++语言结构体中定义另一个结构体指针的经验

本文进行讨论的是,在Linux中,C/C++语言的结构体的使用情况。一般情况下,结构体的使用还是相对比较简单的,它携带的一类物体的某一些属性, 比如 struct person { ...
  • zk65645
  • zk65645
  • 2017年03月04日 19:39
  • 2451

C语言中结构体内存分配机制

C语言中结构体内存分配机制 内存分配遵循的原理: (1) :分配的内存空间的大小必须是4的倍数 (2):在结构体中每一个类型类型说明符(char,int,float,double,lon...
  • Judy_luo
  • Judy_luo
  • 2015年07月10日 10:42
  • 1634

C语言 结构体与结构体指针用法总结

在C语言开发中,结构体用到的机会很多。所谓结构体,就是定义一种里面包含多种元素的变量。 我们来看一个简单的例子。比如你想定义一个书名列表然后为每本书创建书名和作者作为书的信息。结构体变量定义如下: s...
  • SYQ_aa
  • SYQ_aa
  • 2017年08月20日 17:03
  • 208
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?
举报原因:
原因补充:

(最多只允许输入30个字)