栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

初识C语言 4 —关键字、#define定义常量和宏(入门基础篇)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

初识C语言 4 —关键字、#define定义常量和宏(入门基础篇)

文章目录
  • 前言
  • 一、关键字(32个)
    • 1.关键字分类
    • 2、关键字 typedef(类型重命名)
    • 3、简单了解一下 void
    • 4、关键字 static
      • (1)修饰局部变量——称为静态局部变量
      • (2)修饰全局变量——称为静态全局变量
      • (3)修饰函数——称为静态函数
    • 5、 register (寄存器)
  • 二、#define 定义常量和宏
    • 1.定义标识符常量
    • 2. #define定义宏
  • 总结


前言

我们在学c语言的时候,要用到许多关键字定义,而关键字,是不能创建的,原本就有的,那有那些呢?#define定义的宏又是怎样的呢?4000多字没有废话带你详细了解


一、关键字(32个)
auto      break      case      char 
   
const    continue   default     do 
    
double     else      enum     extern 

float      for       goto       if 

int        long     register  return

short     signed    sizeof    static 

struct    switch   typedef    union 

unsigned   void    volatile   while
1.关键字分类

补充一个点:变量命名规则如下:

2、关键字 typedef(类型重命名)

在我们类型中有比较长的的名字,一般写起来比较麻烦
如: unsigned int (无符号整型),这个如果经常写到就会有点麻烦,
我们可以给他改个名字,让我们好写一点,随便给他改个名字 ht
这时我们就可以用到 typedef 关键字,注意:typedef只能对类型重命名
写法如下:

#include
//将unsigned int改名成ht
typedef unsigned int ht;

int main()
{
	//ht此时就是无符号整型 unsigned int
	//与 unsigned int num1 = 1; 意思一样
	ht num1 = 1;

	//输出
	printf("%d", num1);//打印 1
	return 0;
}

在举一个列子:我们结构体中,定义链表节点的方式很抽象,不方便,也可以用 typedef关键字修饰,先演示不修饰的

结构体类型这样定义不容易理解,非常抽象我们就可以用 typedef关键字去重命名他方便我们理解写法演示:

从两个列子中能明显发现 typedef 定义类型的作用:
使用起来不方便的类型可以简化,方便书写,方便理解

3、简单了解一下 void

void类型定义的函数不需要返回值

如果把 void 类型改成其他数据类型就一定要返回一个值
如:改成 int

4、关键字 static

在C语言中:
static 是用来修饰变量和函数的
(1)修饰局部变量——称为静态局部变量
(2)修饰全局变量——称为静态全局变量
(3)修饰函数——称为静态函数

(1)修饰局部变量——称为静态局部变量

我们先看没使用 static 修饰的变量是怎么样的,如图:

运行打印: 2 2 2 2 2 2 2 2 2 2
为什么会都是2,因为循环的值返回给函数test 执行的内容是变量 a=2,而变量a的作用域是出函数体就销毁,第一次循环的值返回给函数体,就打印2,然后变量a销毁,不管值是多少,返回给test,变量就会重新创建a=1,a++,打印为2,如图中我用vs编译器监控可以看到当我循环到值为8时,返回给test,a还是为2,因为变量a在不断销毁创建

如果我们不想让变量销毁创建一直打印2,这时就可以利用 static关键字来修饰局部变量,如图:

现在就打印出: 2 3 4 5 6 7 8 9 10 11,因为变量a 被static关键字修饰,变量a不销毁不会重新创建,此时循环的值返回给函数test时,a的值就会不断随循环值改变,当i=0时,进行i++,为1,返回值1给test,a的值就为1,在进行a++,为2,打印2,当下一次循环i=1时,进行i++,为2,返回值2给test,a的值就为2,进行a++,为3,打印3,依次循环的值返回给test,a就一直更新循环的值,进行a++,打印,直至打印10次

这边我们需要注意的点是: static 修饰局部变量的时候,局部变量出了作用域,不销毁的。本质上,static 修饰局部变量的时候,改变了变量的存储位置的,局部变量从栈区变成了静态区。影响了变量的生命周期,生命周期变长,和程序的生命周期一样,如图:

(2)修饰全局变量——称为静态全局变量

说到全局变量就得复习一下我们第一课,第一课说到,全局变量的作用域是整个工程,也就是可以在另一个源文件.c 创建一个变量,使用,但在本源文件必须加外部声明关键字extern,写法如下一起回顾吧:

如果我们在全局变量前面加上static 关键字会有什么变化,我们一来看一下吧:

可以看到加了static关键字就不能运行了,因为全局变量有外部链接属性,而加了static关键字修饰全局变量a就变成内部链接了,就只能在所修饰的源文件里使用,也就是图中我修饰的源文件ddd.c中使用,其他源文件不能再使用这个全局变量a,这边就说明了static修饰全局变量作用域变小了

(3)修饰函数——称为静态函数

函数也是具有外部链接属性的,所以 static关键字修饰函数也跟全局变量差不多,上两个代码图我们就明白了:

第一张没有用static关键字修饰的函数,可以看到只要在另一个源文件使用外部符号声明的关键字 extern就可以使用了

第二张,用==static-==关键字修饰的函数,如图
这里就产生了报错,跟全局变量一样,理解了 static 关键字全局变量函数也就理解了

5、 register (寄存器)

一张图带你了解寄存器:

寄存器有空间小,速度快的好处,所以,我们程序员,一般会把重要的文件储存在寄存器,代码写法如图:

注意:我们这边只是建议编译器把3储存在寄存器中,但最终决定是否储存在寄存器是编译器决定
试想一下如果很多程序员共同编写项目时,如果每一个人都把他认为重要的东西储存在寄存器,而寄存器的空间又不够这么多储存,不就乱套了,所以最终决定权在编译器

二、#define 定义常量和宏 1.定义标识符常量

这个我们在初识c语言2也讲过,现在跟着我回顾一下吧:

#include

//#define定义标识符常量 NUM=10;
#define NUM 10
int main()
{
	//输出
	printf("%dn", NUM);
	//把标识符常量NUM储存在 n 中
	int n = NUM;
	printf("%d", n);

	//定义数组的长度为10个
	int arr[NUM] = { 0 };
	return 0;
}

注意:这边定义好的NUM=10,是不能被修改的

2. #define定义宏

我们求两个数是怎么求的呢,这边列举两种求法,第一种函数求法,第二种宏求法,这边演示一下:大家就对宏有所了解了:
第一种函数求法:

#include
int ADD(int x, int y)
{
	return x + y;
}
int main()
{
	int a = 10;
	int b = 20;
	int sum = ADD(a, b);//a,b的值返回给函数ADD
	printf("%dn", sum);//打印结果:30
	return 0;
}

第二种宏:

#include

// ADD是宏名,(x,y)是宏的参数但无类型,((x)+(y))是宏体 
#define ADD(x,y) ((x)+(y))
int main()
{
	int a = 10;
	int b = 20;
	int sum = ADD(a, b);//int sum = ((a)+(b))
						//宏是替换的,有替换作用
  	printf("%dn", sum);//打印结果:30
	return 0;
}

从第二个代码中我们发现 #define定义的宏和函数很相似,但写法有区别,我们从第二代码中认识到 #define定义宏的结构,宏是有参数但参数是无类型,宏是替换作用在把 x+y 的值替换成 a+b 的值


总结

本来这初识c语言4我打算直接完结的,但码了两个大点,关键字和#define定义的宏,就又4000字了,所以分成两篇吧,下一篇初识c语言讲最后的指针和结构体,然后初识c语言的总结认识就结束了,后面我会继续去更新c语言中重要的点,毕竟初识c语言只是认识了什么是c语言,后面我会持续学习更新,让我们一起励志做一个c/c++工程师,一起努力!!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/857759.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号