『C语言入门』第一章-初识C语言(5)

目录

 1. 常见关键字

   1)数据类型关键字

   2)流程控制关键字

2.#define 定义常量和宏

  1) 简单的宏定义

  2)带参数的宏定义


 1. 常见关键字

由ANSI标准定义的C语言关键字共32个:

 根据关键字的作用,可以将关键字分为数据类型关键字和流程控制关键字两大类。

   1)数据类型关键字

    1.基本数据类型(5个)

  • void:声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果
  • char:字符型类型数据,属于整型数据的一种
  • int:整型数据,通常为编译器指定的机器字长
  • float:单精度浮点型数据,属于浮点数据的一种
  • double:双精度浮点型数据,属于浮点数据的一种

   2.类型修饰关键字(4个)

  • short:修饰int,短整型数据,可省略被修饰的int。
  • long:修饰int,长整形数据,可省略被修饰的int。
  • signed:修饰整型数据,有符号数据类型(一般定义常量默认为signed)-------可以存储正数和负数。
  • unsigned:修饰整型数据,无符号数据类型-----不能存储负数。

   3.复杂类型关键字(5个)

  • struct:结构体声明
  • union:共用体声明
  • enum:枚举声明
  • typedef:可将复杂,复合的声明类型转化为新的声明类型别名
  • sizeof:得到特定类型或特定类型变量的大小

   4.存储级别关键字(6个)

  • auto:指定为自动变量,由编译器自动分配及释放。通常在栈上分配
  • static:修饰局部变量时,指定为静态变量,分配在静态变量区,修饰全局变量时,指定为局部变量(只允许本文件引用,其他文件不可引用)修饰函数时,指定函数作用域为文件内部
  • register:指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数
  • extern:指定对应变量为外部变量,即在另外的目标文件中定义,可以认为是约定由另外文件声明的对象的一个“引用“
  • const:与volatile合称“cv特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变)
  • volatile:与const合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值

 2)流程控制关键字

        1.跳转结构(4个)

  • return:用在函数体中,返回特定值(或者是void值,即不返回值)
  • continue:结束当前循环,开始下一轮循环
  • break:跳出当前循环或switch结构
  • goto:无条件跳转语句

        2.分支结构(5个)

  • if:条件语句
  • else:条件语句否定分支(与if连用)
  • switch:开关语句(多重分支语句)
  • case:开关语句中的分支标记
  • default:开关语句中的“其他”分治,可选。

        3.循环结构(3个)

  • for:for循环结构,for(1;2;3)4;的执行顺序为1->2->4->3->2...循环,其中2为循环条件
  • do:do循环结构,do 1 while(2);的执行顺序是1->2->1...循环,2为循环条件
  • while:while循环结构,while(1) 2;的执行顺序是1->2->1...循环,1为循环条件

以上循环语句,当循环条件表达式为真则继续循环,为假则跳出循环。

注:C语言中没有 string ,要想在C语言中使用字符串,就要在头文件里定义#include<string.h>(引用)而字符串在c++里的定义是#include<string>;在C/C++中使用字符串也就是定义时不一样,其他的都一样。string 是字符串,char是单个的字符。string相当于一个容器,char可以放在里面。string有结束符,char是没有的。string是c++里的,不是c里的。用string存储字符串时,不用设定字符串的长度,而char要设定。还有就是,string有很强很方便的功能,比如可以方便的赋值,方便的比较大小。

2.#define 定义常量和宏

    注:C语言是区分大小写的,所以程序中出现的关键字必须严格上一些图片要求使用小写字母,标准库中函数(如printf)的名字也只能包含小写字母。但通常情况下,宏的名字一般是使用大写字母(大小写系统没有要求),因为方便区分同时也是也是大部分C程序员多年沿用的规范。

     1) 简单的宏定义

格式:#define <宏名/标识符> <字符串>

#define max 300
int main()
{
	printf("%d\n", max);
	int arr1[max] = { 0 };
	int a = max;
	printf("%d\n", a);
	return 0;
}

①宏名一般用大写

②宏定义末尾不加;

③可以使用#undef命令终止宏定义的作用域

④宏定义可以嵌套

⑤字符串 “ ” 中永远不包含宏

⑥宏替换在编译前进行,不分配内存,变量定义分配内存,函数调用在编译后程序运行时进行,并且分配内存

⑦预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查

⑧使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如:数组大小常用宏定义

    2)带参数的宏定义

      格式:#define <宏名>(<参数表>)  <宏体>         

如:

#define ADD(x,y) ((x)+(y))
int main()
{
	int a = 0, b = 0;
	printf("输入要计算的两个值:");
	scanf("%d %d", &a, &b);
	int c = ADD(a, b);
	printf("计算结果为:%d", c);
	return 0;
}

  宏的作用:使用带参数的宏定义可完成函数调用的功能,又能减少系统开销,提高运行效率。

说明:

①实参如果是表达式容易出问题

#define ADD(x) ((x)*(x))

 int c = ADD(a+b); 第一步换为c=x*x;第二步换为c=(a+b) *( a+b);

但当定义为 #define ADD(x) x*x 

int c=ADD(a+b); 第一步换为 c=x*x; 第二步换为 c=a+b*a+b;

此时,两者关系式优先级不同,结果不同

②宏名和参数的括号间不能有空格

③宏替换之前替换不做计算,不做表达式求解

④宏的哑实结合不存在类型,也没有类型转换

⑤宏展开不占用运行时间,只占用编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)


至此C语言入门学习第五篇完结,如果有什么问题,欢迎大家在评论区,讨论、指正。

也希望此文对于你能够有所帮助,谢谢大家~

码字不易,还望支持!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值