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);
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值