1.宏定义和宏函数
(1)宏定义
宏函数的本质是对源文件进行替换
#define MAX 100
先声明一个宏,然后再main函数中使用该宏
int main()
{
printf("%d", MAX);
}
宏变量也可以作为常量进行使用,并且它的值不允许改变
宏定义是C语言提供的三种预处理功能的其中一种,这三种预处理包括宏定义、条件包含、条件编译
(2). 宏函数
宏函数的本质还是源文件替换,但是可以传递参数
#define MAX(a, b) a > b ? a : b
int main()
{
int max = MAX(1, 3);
}
上面的函数是个比较大小的宏函数,我们使用宏函数实先比使用函数实现的可以更加简洁
2.条件编译
如果我们的程序在多个文件中引入#include<stdio.h>,不会被多次引入,我们进入该头文件,可以看到前面的几行代码:
#ifndef _STDIO_H_
#define _STDIO_H_
这两行的意思是,如果没有宏_STDIO_H,那么他就会使用#define定义这个宏,如果宏定义了那么就不会重复引入头文件中的内容了
#ifdef 如果定义了
#ifndef 如果没定义
...
#endif 结束
我们观察一个#if的小例子
#include<stdio.h>
#define SIZE 120
int main()
{
#if SIZE > 100
printf("1");
#elif SIZE > 50
printf("2");
#else
printf("0");
#endif
return 0;
}
宏定义一个常量,如果这个常量大于100则输出1,如果这个常量大于50小于100则输出2,其他情况输出0,这个和函数的if else ..if其实是一样的
但是我们知道所谓的条件编译是根据条件的不同,而进行选择性编译,即如果条件不满足,代码是不会被编译的,但是if-esle即便不满足条件也是会被编译的。
条件编译使用情况:
跨语言,比如C++和c语言;
跨平台,比如有的代码是在windows平台下,有的是在linux平台下的;
所以,条件编译可以跨语言跨平台使用,在我们需要在这种情况下编程,使用条件编译还是比较好的
3. 类型转换
(1)隐式转换:不同类型数据间混合运算,如果两个数据类型不同,如果你不进行强制转换,系统会根据一定的规律进行隐式转换,比如float和double,他们进行运算,结果就是float会自动转换成double,然后两个double进行运算,如果是int和float或double运算,那么int就会被转换成float或double进行运算,字符型与整形数据进行运算,会用字符的ASCLL码值进行运算,这些都是系统自动转换而成的
#include<stdio.h>
int main()
{
int a = 20;
float b = 10;
printf("%f", a + b);
return 0;
}
这个int和float进行运算,int会转换成float进行运算,最后结果是一个float型的输出
(2)强制转换:我们可以在知道是什么数据类型进行运算的情况下,为了防止出现数据丢失,我们可以自行对数据进行强制类型转换,这样就能得到我们预期的结果
#include<stdio.h>
int main()
{
char a = '10';
int b;
b = (int) a;
printf("%d", b);
return 0;
}
我对char进行强制类型转换,就可以用%d输出了
4. 数组
在C语言中,声明数组必须指定元素的类型和元素的数量,数组的大小必须是一个大于0的整数,类型是C语言的有效数据类型
我们可以逐个为数组进行赋值进行初始化
int array[5] = {0, 1, 2, 3, 4};
如果我们在后面的大括号内写了数值,[]内可以省略
如果[]内的数大于{}内的数量,则C语言会自动为后面的数组赋值0
做一个练习:
求一个数组中的最大值和最小值
#include<stdio.h>
int main()
{
int array[5] = {0};
printf("请输入五个数:\n");
int i;
for(i = 0; i < 5; i++)
{
scanf("%d", &array[i]);
}
int max = array[0];
int min = array[0];
for(i = 0; i < 5; i++)
{
if(max < array[i])
{
max = array[i];
}
}
for(i = 0; i < 5; i++)
{
if(min > array[i])
{
min = array[i];
}
}
printf("最大值为%d, 最小值为%d", max, min);
return 0;
}
我的想法是,先为数组赋值,然后用一个min和max分别去和其他的数字比,分别求出最大值最小值
总结:
今天学到了数组,就可以用数组解决之前很难解决的问题,学习了数组,就可以用单一变量去存储很多值,就可以最这些值批量操作,虽然初学有些难,有些抽象,但是我想再多练练还是可以有所收获