当前位置: 首页 > news >正文

typedef,#define,asserr,exit函数,free函数

一.typedef的应用

1.给已定的变量类型起个别名

加不加typedef,类型不变

(加之前是个数组,加之后是数组类型;

   加之前是个函数指针,加之后是函数指针类型;)

struct _person
{char name[20];int age;
};
typedef _person person_t;上下相等typedef struct _person
{char name[20];int age;
}person_t;
//怎么做的效果很是明显
struct Student
{char name[20];int age;char sex;
};int main(void)
{struct Student stu1 = { "qwl" , 20, 'm' };struct Student stu2 = { "qwj" , 16, 'm' };struct Student stu3 = { "chx" , 48, 'm' };struct Student* pst1 = &stu1;struct Student* pst2 = &stu2;struct Student* pst3 = &stu3;return 0;
}typedef struct Student
{char name[20];int age;char sex;
}STU;int main(void)
{STU stu1 = { "qwl" , 20, 'm' };STU stu2 = { "qwj" , 16, 'm' };STU stu3 = { "chx" , 48, 'm' };STU * pst1 = &stu1;STU * pst2 = &stu2;STU * pst3 = &stu3;return 0;
}

二.#define

标识符替换

#定义   标识符   内容
#define name    stuff#define MAX 100
#定义   宏名(参数表)    内容
#define  name(part-list)  stuff#define ADD(a,b) (a)+(b) 

part-list是一个由逗号隔开的标识符

三.assert

3.1 所在头文件 <assert.h>

3.2 assert()对表达式进行检测

       如果expression的结果为 0(条件不成立),那么断言失败,表明程序出错,assert() 会向标准输出设备(一般是显示器)打印一条错误信息,并调用 abort() 函数终止程序的执行。

        如果expression的结果为非 0(条件成立),那么断言成功,表明程序正确,assert() 不进行任何操作。

3.3 如果定义了#define NDEBUG,assert()就无效了

每次断言只能检验一个表达式

四.exit()函数

4.1 头文件<stdlib.h>
      4.2 功能:

退出程序的函数

     4.3 用法:

exit(1); 为异常退出(只要括号里的参数不是0都为异常退出

exit(0);正常退出

4.4 与return();的区别

return()是返回上一级主调函数,不一定会退出程序

五.free函数

5.1 头文件<stdlib.h>

5.2free函数必须和malloc函数同时使用,否则会报错

free无法释放栈内存的变量

#include<stdio.h>
#include<stdlib.h>
struct node //定义结构体
{int name;//结构体里面定义一个变量叫做name
};int main()
{struct node *p;//定义一个结构体变量free(p);
}

这个代码会报错,因为free只能释放由malloc动态分配在堆内存的内存,直接在主函数定义结构体变量是分配在栈内存里的内存,所以释放不了

#include<stdio.h>
#include<stdlib.h>
struct node //定义结构体
{int name;//结构体里面定义一个变量叫做name
};int main()
{struct node *p = malloc(sizeof(struct node));//定义一个结构体变量free(p);
}

5.3 free函数释放的是指针所指向的地址的内存(不是指针本身所在地址的内存),因此可以通过函数直接释放内存

#include<stdio.h>
#include<stdlib.h>
struct node //定义结构体
{int name;//结构体里面定义一个变量叫做name
};void fun(struct node *p)
{free(p);
}int main()
{struct node *p = malloc(sizeof(struct node));//定义一个结构体变量p->name = 10;//给结构体赋值printf("%d\n",p->name);fun(p);//释放内存printf("%d",p->name);
}

http://www.lryc.cn/news/340142.html

相关文章:

  • Linux的重要命令(二)+了解Linux目录结构
  • nmap使用
  • 简约风好看的个人主页源码
  • 1113. 红与黑--Flood Fill 算法
  • 深入Java中间件:编程设计精粹
  • AUTOCAD输出或打印PDF文件时,如何将图形居中且布满图纸?
  • unity socket udp 连接
  • 【ensp】VLAN间通信的解决办法
  • 接口测试框架搭建D22
  • CASA模型教程
  • 算法思路-遥感语义分割与变化检测
  • 动态规划专练( 231.打家劫舍Ⅱ)
  • K-means和逻辑回归
  • 3.2 iHRM人力资源 - 组织架构 - 编辑及删除
  • 支付系统核心逻辑 — — 状态机(JavaGolang版本)
  • rest_framework_mongoengine实现后端的增删改查
  • 【精读文献】Scientific data|2017-2021年中国10米玉米农田变化制图
  • 高光谱图像修复笔记
  • GPS定位原理及应用分析
  • Java面试篇9——并发编程
  • [RK3399 Linux] 使用busybox 1.36.1制作rootfs
  • JavaScript入门--循环
  • 【Delphi 爬虫库 1】GET和POST方法
  • [leetcode] 快乐数 E
  • Lobe UI - 基于 AntDesign 开发的 AIGC Web 应用的开源 UI 组件库
  • Java常用类 -- Random类
  • Docker安装Kong网关
  • spispispi
  • MySQL——创建和插入
  • 【BUG】element-ui表格中使用video标签,数据翻页,video中的视频仍然显示第一页的视频,没有重新加载