C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?
2017-07-15 14:33
1141 查看
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)所以,所谓的分配空间,就是对指针赋值,把一个变量的地址赋值给一个指针。
问题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)所以,所谓的分配空间,就是对指针赋值,把一个变量的地址赋值给一个指针。
相关文章推荐
- C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?
- c语言中定义结构体指针并指向一片内存空间和直接定义一个结构体变量的区别 Node *p=(Node *)malloc(sizeof(Node)); 和 Node p 两个有什么区别??? Node是一
- C\C++中结构体变量与结构体指针内存分配问题
- 数据结构 学习笔记之:结构体及其所定义变量的内存分配的问题
- (c++)定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。
- c语言结构体内存分配问题
- C语言中结构体内存分配问题解析。
- C/C++中结构体内存分配问题
- 关于C++中结构体及其指针成员的内存分配和释放
- c++中函数中变量内存分配以及返回指针、引用类型的思考
- 定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天?注意闰年问题。
- 浅谈C/C++结构体内存分配问题
- c中定义变量的内存分配顺序问题(极易错!!!)
- 定义一个结构体变量(包括年、月、日),编写程序,要求输入年月日,程序能够计算并输出改日是本年中的第几天。注意闰年问题。(数组)
- c++中变量的内存分配问题
- C++中的成员变量的内存分配问题
- 问题十六:每位同学的信息学号、姓名、C++、高数、英语成绩,定义一个学生成绩的结构体数组。
- C++基础之两个头文件使用同一个变量会重复定义怎么办
- C语言——指针与结构体 内存的动态分配
- C++。memory leak检查办法。一个当内存分配后未回收(或导致各种问题)的检查办法