typedef,结构体,共用体,联合体
typedef的用途:
封装数据类型,方便移植
简化函数指针的定义
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">
结构体:不同类的型元素汇聚。
(1)、在声明类型的同一时候定义变量:
struct结构体名{
成员列表
}变量名列表;
(2)、直接定义结构体类型变量
struct
{
成员列表
}变量名表列;
指向结构体变量的指针
定义形式:struct结构体名
*结构体指针名;
比如:struct student *p;
#define_CRT_SECURE_NO_WARNINGS //去掉安全检查
#include<stdio.h>
#include<stdlib.h>
structmydata
{
intnum;
charstr[100];
};
voidmain()
{
//int a;
//int *p;
//struct mydata *p;
//printf("%d", sizeof(p));
structmydatamd; //实例化结构体
md.num
= 99;
sprintf(md.str,"gogogo");
printf("md.num=%d,md.str=%s",md.num,md.str); //打印数据
structmydata
*p; //p存储地址
struct mydata决定了大小还有怎样解析
printf("\n%d",sizeof(p));
p
= &md;//结构体指针初始化,存储地址
printf("\n(*p).num=%d,(*p).str
= %s", (*p).num,
(*p).str);
printf("\np->num
= %d,p->str=%s",p->num,p->str);
//指针訪问结构体。第一种方式(*p).成员变量,另外一种p->成员变量
getchar();
}
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">
结构体变量:
简单案例:
结构体成员地址从低到高连续分配。首成员相应低地址。
公用/联合体(union):使用不同类型的变量共占用一段内存(相互覆盖)。次共用体大小为元素中最大字节变量。
共用体成员索引:能够通过.成员变量符,也能够通过 à指针索引。
union案例
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">
枚举变量:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">
动态内存申请:
在内存中申请的。
malloc()返回的类型是:void *类型的
2、malloc之后要记着释放,使用free函数。否则会造成内存泄露。导致其他程序不能再使用这块儿内存了。
操作系统在管理malloc的时候是一下这样的方式:
// |
地址 |
// |
大小 |
调用malloc的时候,系统每次都会为malloc创建一个节点,并记录本次malloc的首地址和malloc的大小。
malloc内存里面申请出来的值是什么值?
在gcc这个编译器下,malloc默认把申请的内存中的初始值变成0,可是在不同的编译器下回有所不同。
假设想将malloc中申请的内存的值变成0,能够使用memset(p,0x0,100);假设想使用这个函数。要加上头文件<string.h>
calloc()
realloc:当内存不够了时候,能够通过realloc继续申请内存空间。
realloc的实现策略:
当malloc后面有足够的存储空间。这时候相当于把malloc的首地址不变。仅仅是把malloc的大小改大些。
假设malloc后面的存储空间不够,那么这时候realloc新开辟一个地址空间,然后将原来malloc的内存里的内存拷贝到新开辟的内存空间中。
typedef,结构体,共用体,联合体的更多相关文章
- 5、数组&字符串&结构体&共用体&枚举
程序中内存从哪里来 三种内存来源:栈(stack).堆(heap).数据区(.date): 栈(stack) 运行自动分配.自动回收,不需要程序员手工干预: 栈内存可以反复使用: 栈反复使用后,程序不 ...
- C++结构、共用体、枚举
一.结构 结构是C++OOP的基石.学习有关结构的知识僵尸我们离C++的核心OOP更近. 结构是用户定义的类型,同一个结构可以存储多种类型数据,这使得将一个事物的不同属性构成一个对象成为了可能.另外C ...
- C语言高级-结构,共用体,文件,链表
C语言结构 标准声明方式 struct student{ int age; char sex; }; 这个可以在main函数中定义: struct student ...
- C语言基础 (11) 结构体 ,共用体 枚举 typedef
1 课堂回顾 作用域与生命周期 2 static 局部变量 2 打字游戏 3 内存分区代码分析 4 结构体基本操作 (复合类型[自定义类型 #include <stdio.h> #incl ...
- 瘋子C语言笔记(结构体/共用体/枚举篇)
(一)结构体类型 1.简介: 例: struct date { int month; int day; int year; }; struct student { int num; char name ...
- C++复合类型(结构,共用体,枚举)
•结构是用户定义的类型,而结构的声明定义了这种类型的数据属性. 一.关键字struct声明: 定义了一种新类型 struct inflatable{ char name[20];//结构成员 fl ...
- 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符
[源码下载] 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 ...
- C语言笔记 09_共用体&typedef&输入|输出
共用体 共用体允许您在相同的内存位置存储不同的数据类型.您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值.共用体提供了一种使用相同的内存位置的有效方式. 定义共用体 为了定义共用体, ...
- C基础知识(8):结构体、共用体、位域
结构体 数组允许定义可存储相同类型数据项的变量,而结构体是C编程中另一种用户自定义的可用的数据类型,它允许用户可以存储不同类型的数据项. struct 语句的格式如下: struct [structu ...
- C语言------结构体和共用体
仅供借鉴.仅供借鉴.仅供借鉴(整理了一下大一C语言每个章节的练习题.没得题目.只有程序了) 文章目录 1 .实训名称 2 .实训目的及要求 3.源代码及运行截图 4 .小结 1 .实训名称 实训8:结 ...
随机推荐
- php处理ajax
首先安装wamp,若安装过mysql则终止进程防止冲突,可以访问localhost说明成功.在www目录下新建项目,使用localhost访问. php: <?php //3.获取ajax传过来 ...
- 【06】Vue 之 组件化开发
组件其实就是一个拥有样式.动画.js逻辑.HTML结构的综合块.前端组件化确实让大的前端团队更高效的开发前端项目.而作为前端比较流行的框架之一,Vue的组件和也做的非常彻底,而且有自己的特色.尤其是她 ...
- Number String(hdu 4055)
题意:给定一个字符串,I表示本字符要比前一个字符大,D表示本字符要不前一个字符小,?可大可小,问1~n的所有排列中,有多少满足条件 /* dp方程的设定比较显然,dp[i][j]表示选了i个元素,最后 ...
- [Json] 1 - 数据格式(转)
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言.易于人阅读和编写,同时也易 ...
- Linux STP介绍
1. 介绍 STP(Spanning Tree Protocol)即生成树协议,标准为IEEE802.1D-1998STP是一种二层冗余技术,利用STA算法构建一个逻辑上没有环路的树形网络拓扑结构,并 ...
- JavaScripts广告轮播图以及定时弹出和定时隐藏广告
轮播图: 函数绑定在body标签内 采用3张图,1.jpg 2.jpg 3.jpg 利用定时任务执行设置图片属性 src 利用for循环可以完成3秒一次 一替换. 定时弹出广告: 由于bod ...
- LeetCode OJ--N-Queens II
https://oj.leetcode.com/problems/n-queens-ii/ N皇后问题,计算解的个数 class Solution { public: int totalNQueens ...
- android studio 按钮运行按钮后,不弹出选择运行模拟器的对话框
这个问题实际上很简单,奈何碰到的时候做了很多无用功.clean,rebulid... 特此记录,方便后来人. 解决步骤: 1.关闭AndroidStudio,并重启. 2. 把截图中的地方的勾去掉.检 ...
- AC日记——【模板】树链剖分 洛谷 P3384
题目描述 如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节点的值都加上z 操作2: 格式 ...
- react-transition-group v2 用法概述
官方文档地址:https://reactcommunity.org/react-transition-group/ 在react-transition-group v2中,暴露了三个组件: Trans ...