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)所以,所谓的分配空间,就是对指针赋值,把一个变量的地址赋值给一个指针。

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

  1. c语言定义函数后引用,求助,函数在其他函数中使用时要先声明后调用,这个没声明就用了...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 如题,程序如下: #include #include //malloc,calloc,free,realloc头文件 #define LEN sizeof ...

  2. 链表list(链式存储结构实现)_VOL.2 如何在python中实现链式存储结构

    一.前言 链式存储作为一种重要的数据存储方式有着极强的数据组织能力.灵活型和动态性,在众多数据结构中应用非常广泛.所谓链式存储结构,就是采用分散的存储空间分别存储每一组数据再通过地址链接的形式将全部数 ...

  3. Win32 C 语言程序编译多个文件和在多个文件中声明外部变量

    先看一下程序的运行结果:Win32程序,没窗口:只有WinMain入口: 工程如下:main.c使用了a.c.b.c.d.c中的函数: main.c: #include <windows.h&g ...

  4. 【C语言】创建一个函数,利用该函数将字符串中的小写字母转换为大写字母

    原理: 这类题目主要通过ASCII(美国信息交换标准代码)码差值实现,A对应ASCII码十进制数字是65,a对应ASCII码十进制数字是97,即大小写字母之间ASCII码差值为32,想要将大写字母转换 ...

  5. C语言实现了一个顺序表(附完整源码)

    C语言实现了一个顺序表 顺序表 顺序表的概念 顺序表的存储结构 C语言实现了顺序表完整源码 顺序表 顺序表的概念 顺序表是线性表的顺序存储结构,加按顺序存储方式构造的线性表的存储结构. 说明:对于n个 ...

  6. c语言定义不定长数组初始化_数组的定义,初始化和使用,C语言数组详解

    数组可以说是目前为止讲到的第一个真正意义上存储数据的结构.虽然前面学习的变量也能存储数据,但变量所能存储的数据很有限.不仅如此,数组和指针(后续会讲)是相辅相成的,学习数组可以为学习指针打下基础. 那 ...

  7. 结构体变量与结构体指针的区别

    A.对于结构体变量(即代码中Lnode类型),本身作为一个变量,就像是int a中的a变量,本身是具有内存空间的,该内存空间是用于存放该结构体成员的数值的.因此区别于结构体指针,结构体变量是不需要ne ...

  8. 【C 语言】二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一、二 模型数据拷贝到 三 模型中 并 排序 )

    文章目录 一.指针数组 和 二维数组 数据 拷贝到 自定义二级指针 中 1.函数形参 设计规则 2.三种内存模型 对应 函数形参 指针退化规则 二.完整代码示例 一.指针数组 和 二维数组 数据 拷贝 ...

  9. C语言定义一个结构体方法,C语言结构体定义的方法汇总

    什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类.结构体可以被声明为变量.指针或数组等,用以实现较复杂的数据 ...

最新文章

  1. JS基础_使用工厂方法创建对象(了解下就行了,用的不多)
  2. HDU4891 The Great Pan 暴力
  3. opengl笔记——OpenGL好资料备忘
  4. insertAfter函数
  5. fastjson maven依赖_Spring Boot 使用 Maven 定制一个 parent 简化开发
  6. 64位Windows7环境下,Eclipse集成svn后出现Failed to load JavaHL Library的解决办法
  7. IEC 60335-1家用电器的安全标准及安规寿命检测设备
  8. 神策分析 Android SDK 之用户路径采集
  9. C盘爆满?简单几招教你释放、清理C盘几十G空间,最有效的C盘清理方法
  10. android 百度地图走动轨迹,百度地图实现小车规划路线后平滑移动功能
  11. 案例分享 | 腾讯互娱基于 CPU 环境的分布式 YOLOv3 实现
  12. 对外汉语偏误语料库_对外汉语偏误汇总
  13. HTML figure 标签 figcaption 标签
  14. latex公式换行后保证括弧大小相同
  15. MySQL:安装软件和基本操作
  16. APICloud AVM框架 开发视频会议APP
  17. 在线Excel框架——luckysheet
  18. python生成图像公章,用PPT就可以做印章?是的,超简单超逼真,教你一分钟搞定...
  19. 醉翁之意不在酒 “三维地籍”背后大棋局
  20. 用DameWare远程控制,向客户端安装时,提示“找不到网络路径”的解决办法

热门文章

  1. css之line-height及图片文字垂直居中
  2. Beamer 目录分栏
  3. 一站式机器学习平台TI-ONE是什么?——云+未来峰会开发者专场回顾
  4. IOS-Core Data的使用
  5. 根据日期时间和随机量生成唯一ID!!
  6. 001/Docker入门(Mooc)
  7. video标签 在微信浏览器打开,不弹出大的独立窗口 而是直接播放。
  8. 【笔记】shellcode相关整理
  9. 5 个关于 API 中日期和时间设计规则
  10. 转载:thread的六种状态