定义一个结构体指针需要分配存储空间
一个 结构 需要 定义 指针 分配 存储空间
2023-09-14 09:09:30 时间
问题:定义结构体指针时,有没有同时分配存储空间啊?看到结构体的数组定义好以后就直接可以用了。但是结构体指针在链表中还要malloc()申请空间。这是为什么啊?
答案:定义结构体指针时并没有分配存储空间,所以要用malloc()申请空间。
//下面仅仅是定义一个类型,不会产生变量,所以不存在分配空间的问题
struct data
{
int i;
int j;
};
void main(void)
{
struct data dat1; //定义一个struct data类型的变量,和int i同理。
printf("%d\n", sizeof(struct data)); //8个字节
printf("%d\n", sizeof(dat1)); //8个字节
struct data* pdat1;//定义一个struct data类型的指针,和int *pi 同理。
printf("%d\n", sizeof(pdat1)); //4个字节,就是一个指针的空间,pdat1并没有结构体变量的信息。
pdat1 = (struct data*)malloc(sizeof(struct data)); //申请一个空间,把该空间地址给pdat1.
printf("%d\n", sizeof(*pdat1)); //8个字节
struct data dats1[2];
printf("%d\n", sizeof(dats1)); //16个字节,两个data变量,不是data指针。
dats1[0].i = 20; //可以直接使用数组里面的结构体变量
dats1[0].j = 30;
struct data* dats2[2]; //指针数组,包含两个指针,而不是结构体变量
printf("%d\n", sizeof(dats2)); //8个字节,两个指针的大小
dats2[0]->i = 20; //错误!还没有给dats2[0] 指针分配空间
dats2[0]->i = 20; //错误!还没有给dats2[0] 指针分配空间
dats2[0] = (struct data*)malloc(sizeof(struct data)); //分配空间
dats2[0]->i = 20; //ok
dats2[0]->i = 20; //ok
}
相关文章
- 【C/C++学院】0817-递归汉诺塔 双层递归 /CPP结构体 /面向过程与面向对象的编程模式/类的常识共用体实现一个类的特征/QT应用于类以及类的常识
- 从 JDK 9 到 19,认识一个新的 Java 形态(内存篇)
- intellij idea 2021.2 修改一个springboot项目的jdk版本(jdk 15)
- 回调--一个经典例子让你彻彻底底理解java回调机制
- (笔试题)把一个整数数组中重复的数字去掉
- 一个漂亮的输出MySql数据库表结构的PHP页面
- 用最少的代码打造一个Mini版的gRPC框架
- SAP UI5 应用开发教程之八十一 - 采用 OPA5 进行 SAP UI5 集成测试(Integration Test)的一个例子试读版
- 一个由于Pricing RFC引起的UI超时问题
- 用一个实际例子理解Docker volume工作原理
- Atitit 代码的导航 1.1.代码的层次导航 语句 函数方法 类 包 1.2.4.4. 代码可视化 流程图 一个方法内,多个代码行的关系图 语句to方法2 1.3.4.5. 类图 类结构
- Atitit 研发体系 之道 attilax著 艾龙著 1. 发管理是一个完整的管理体系,从结构上来讲,它主要由四个方面的内容构架而成:组织结构与岗位设置 管理流程与工作流程、、项目及管道管理(
- 使用扩展技术对SAP Fiori应用进行端到端的增强,一个实际案例介绍
- Python编程语言学习:仅需一行代码将字符串化的数字数组、int数组、float数组实现之间互换(将一个字符串数组转换成整型数组)
- 一个合格的CloudNative应用:程序当开源软件编写,应用配置外置
- 习题 7.1 定义一个结构体变量(包括年、月、日),编写程序,要求输入年、月、日,程序能计算并输出该日在本年中是第几天。注意闰年问题。
- c语言(结构体)定义一个User结构体,含以下字段:
- ChatGPT上线了!请使用go语言写一个bert模型结构?
- ChatGPT上线了!请使用c语言写一个bert模型结构?
- C语言逆向——数组和结构体,数组多维只是一个编译构造的假象,本质会转成一维数组,结构体的话最难的就是对齐了
- LSM树——LSM 将B+树等结构昂贵的随机IO变的更快,而代价就是读操作要处理大量的索引文件(sstable)而不是一个,另外还是一些IO被合并操作消耗。
- 学会处理对一个事件源有多个事件的监听器
- Kotlin 特殊的registerActivityLifecycleCallbacks+一个非Activity转跳到另一个Activity
- 初窥门径:一个Go程序的结构是怎样的?
- 我有一个还在蹒跚学步的小孩是否应该学习Python?