typedef的用途:

  1. 封装数据类型,方便移植

  2. 简化函数指针的定义

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">

动态内存申请:

  1. 在内存中申请的。

    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的实现策略:

  1. 当malloc后面有足够的存储空间。这时候相当于把malloc的首地址不变。仅仅是把malloc的大小改大些。

  2. 假设malloc后面的存储空间不够,那么这时候realloc新开辟一个地址空间,然后将原来malloc的内存里的内存拷贝到新开辟的内存空间中。

typedef,结构体,共用体,联合体的更多相关文章

  1. 5、数组&字符串&结构体&共用体&枚举

    程序中内存从哪里来 三种内存来源:栈(stack).堆(heap).数据区(.date): 栈(stack) 运行自动分配.自动回收,不需要程序员手工干预: 栈内存可以反复使用: 栈反复使用后,程序不 ...

  2. C++结构、共用体、枚举

    一.结构 结构是C++OOP的基石.学习有关结构的知识僵尸我们离C++的核心OOP更近. 结构是用户定义的类型,同一个结构可以存储多种类型数据,这使得将一个事物的不同属性构成一个对象成为了可能.另外C ...

  3. C语言高级-结构,共用体,文件,链表

    C语言结构 标准声明方式 struct student{        int age;        char sex;    }; 这个可以在main函数中定义:  struct student ...

  4. C语言基础 (11) 结构体 ,共用体 枚举 typedef

    1 课堂回顾 作用域与生命周期 2 static 局部变量 2 打字游戏 3 内存分区代码分析 4 结构体基本操作 (复合类型[自定义类型 #include <stdio.h> #incl ...

  5. 瘋子C语言笔记(结构体/共用体/枚举篇)

    (一)结构体类型 1.简介: 例: struct date { int month; int day; int year; }; struct student { int num; char name ...

  6. C++复合类型(结构,共用体,枚举)

    •结构是用户定义的类型,而结构的声明定义了这种类型的数据属性. 一.关键字struct声明:   定义了一种新类型 struct inflatable{ char name[20];//结构成员 fl ...

  7. 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符

    [源码下载] 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 ...

  8. C语言笔记 09_共用体&typedef&输入|输出

    共用体 共用体允许您在相同的内存位置存储不同的数据类型.您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值.共用体提供了一种使用相同的内存位置的有效方式. 定义共用体 为了定义共用体, ...

  9. C基础知识(8):结构体、共用体、位域

    结构体 数组允许定义可存储相同类型数据项的变量,而结构体是C编程中另一种用户自定义的可用的数据类型,它允许用户可以存储不同类型的数据项. struct 语句的格式如下: struct [structu ...

  10. C语言------结构体和共用体

    仅供借鉴.仅供借鉴.仅供借鉴(整理了一下大一C语言每个章节的练习题.没得题目.只有程序了) 文章目录 1 .实训名称 2 .实训目的及要求 3.源代码及运行截图 4 .小结 1 .实训名称 实训8:结 ...

随机推荐

  1. 【01】iconfont的使用

    我之前因为项目用bootstrap比较多,所以使用font awesome字体图标比较多,后来接触到了iconfont,发现想要的什么图标都有,还可以自定义图标,非常强大!之前看了一波教程,觉得繁琐, ...

  2. 2017最好的JavaScript框架、库和工具 — SitePoint

    与开发者数量相比,可能有更多的JavaScript框架.库和工具.截止到2017年5月,在GitHub上快速搜索能搜到超过110万的JavaScript项目. 在npmjs上有50万的可用包,并且这些 ...

  3. Replacing Accented characters(Diacritic) .NET

    原文发布时间为:2012-02-17 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Collections.Generic;using Syste ...

  4. 多表的时候怎样在MVC VIEW中显示

    原文发布时间为:2011-04-01 -- 来源于本人的百度文章 [由搬家工具导入] Linq join query displayed in MVC view Instead of returnin ...

  5. Python 函数的一般形式及参数

    #!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2017/11/01 21:46 # @Author : lijunjiang # @Fi ...

  6. 分享C#识别图片上的数字

    通过Emgu实现对图片上的数字进行识别.前期步骤:1.下载Emgu安装文件,我的版本是2.4.2.1777.3.0版本则实现对中文的支持.2.安装后需填写环境变量,环境变量Path值后加入Emgu安装 ...

  7. With语句在数据统计应用

    WITH TMP_EXECUTOR(EXECUTOR,EXECUTORNAME) AS ( SELECT DISTINCT T.EXECUTOR ,T1.FULLNAME AS EXECUTORNAM ...

  8. Android判断是否为刘海屏

    主要总结主流品牌小米.华为.oppo.vivo的刘海屏判断.在某些特殊页面需要适配刘海屏时,可以用以下方法判断.或者判断屏幕比例是否大于2. /** * 小米刘海屏判断. */ public stat ...

  9. PC网页js调用本地应用程序

    最近要现实一个在PC网页中实现点击按钮调用本地应用程序的功能 其实实现原理也非常简单, 首先注册一个本地注册表文件,指向本地应用程序路径 其次在网页中用js指向这个注册表文件,就可以实现网页调用本地应 ...

  10. 安全性测试入门 (四):Session Hijacking 用户会话劫持的攻击和防御

    本篇继续对于安全性测试话题,结合DVWA进行研习. Session Hijacking用户会话劫持 1. Session和Cookies 这篇严格来说是用户会话劫持诸多情况中的一种,通过会话标识规则来 ...