目录
常量
字符串
转义字符
注释
选择结构
循环结构
函数
数组
前面我们介绍了变量,接下来我们看看常量,常量也有他不可替代的作用。
常量的分类
- 字面常量(字符,字符串,数字,小数等)
- const修饰的常变量
const int num = 10; num = 20; //错误信息:表达式为可修改的左值
const就像一个绳索,牢牢地拴住了变量,你想改变,它就会报错。但为什么被称为常变量呢,那是因为在一个数组的元素个数必须是常量,而变量则会报错,在当前vs2019这个编译器下,使用const和不加const都会报错,说明了它其实是一个变量。很多人不理解,我以前也是,但仔细一想,const只是让这个变量无法被我们用户随便修改而已,而它在没修改前不就是个变量吗,只是相当于它没加const前你不去修改它一个道理,所以叫他常变量,很合理吧。
tip:随着C语言的发展,变长数组在C99之后是能够支持的。
- #define定义的标识符常量
define是实至名归的常量,而#define 的常量的用法也是固定的。
tip:
为std(standard)标准的 input 和output,即为标准的输入输出的头文件。 #define MAX 100 #include
int main() { int a = MAX;//正确 int arr[MAX];//正确 //MAX = 1000;错误写法 printf("%d",a); return 0; }
- 枚举常量
枚举就是例举一些事物,例如三原色,性别等。我们以性别为例。
enum SEX { male, female, secret };//枚举的定义 enum SEX s = male; enum SEX s2 = secret; //既然是常量,那它有值吗,当然。 printf("%d %d %d",male,female,secret); //结果为0 1 2
当然了,你也可以在定义的时候为其赋初值,有趣的是,赋值后的数字是连续加1的,这也是枚举的一大特点。
大家目前了解这4种常量就行了。
要了解字符串,首先知道什么是字符,字符就是就是键盘上能敲出来的数据,那么'0'和0的区别就是一个是字符,一个是数字。而字符和字符串的打印格式也有所区别。字符是"%c",而字符串是"%s"。那么我们如何在计算机储存它们呢,于是我们引入ASCII码。使其能以二进制储存在内存中。
字符串
由双引号引起的字符为字符串,而"a" , ""也可以称为字符串,我们可以通过调试来观察字符串在内存中的储存方式,可以发现字符串是连续储存的,而在最后一个字符的末尾,都会有一个'\0',这是什么意思呢?我们来研究一下。
显而易见,'\0'的作用是充当了终止符的作用,没有'\0'就会产生这样的乱码。解决办法就是在arr2的'f'后加上'\0'就OK了。通过测试我们还可以发现'\0'和0是等价的。
tip:字符用arr2的方式写,可以理解为用ascii码替换,本质是int,然后一个一个按顺序在数组空间内储存,再通过%s打印出来。
printf("%d",'\0');//输出0
strlen——求字符串长度
对于字符串,我们也有专门的求长度的工具,用strlen求字符串长度直接输出你输入的字符串长度,遇到 '\0' 为止。
他也有自己的头文件
,是关于字符串的。
刚才我们遇到的'\0'就是一个典型的转义字符,就是有其自身特殊功能的字符,常用的有
'\n'//换行符
'\0'//字符串结束标志,本质是数字0
'\t'//制表符,类似键盘上的tab功能
'\a'//报警符
\ddd//ddd表示3个8进制位数字
\xdd//dd代表2位16进制数字
printf("%c",'\123');
将其转换成对应的ascii码值的字符,再以对应字符输出,结果为字符'S',在测试的时候发现一个有趣的现象,当我将%c改为%d时,其值也转换成对应的ascii码值,如果把这个值用%c输出,则会得到S这个结果。进而得出字符与数字可以相互转换。
输出如果超出ASCII码值,输出的值则无意义。
在使用的时侯需要小心辨认,切不可将普通的字符混为一谈。
那如何避免转义,输出其本来值呢,我们可以在前面加'\'的方式,使其转义成一个普通字符。
printf("%s\n","\\n");//输出\n
printf("%s\n","\"");//输出"
printf("%s\n","\?\?)");//输出??),防止?被转义成三字母词
printf("%c\n",'\'');//输出字符'
tip:不要过于纠结单个字符常量输出是"%c"还是"%s"这个问题,记住在字符串数组中用"%s",char 中用"%c"就行了。
注释作为一种说明,其本身并不会参与编译,代码在 编译过程中就会删除其内容。正如我之前用'//'一样,它的作用是让作者和他人更好地理解代码内容,毕竟写代码太多有时候就容易忘了自己写的个啥了。无形之中提高了代码的可读性和保鲜性。
//单行注释
/*里面的内容为注释
*/
选择语句就是 if else 语句和switch case语句
int a = 1; if(a>1)//括号表判断,0为假,非0为真,满足逻辑为真,否则为假 { ; } else printf("你好");//不满足if的条件执行else
结果输出你好,而switch case语句是处理多分支的选择语句,后面会详细说明。
#include
int main()
{
int n=0;
while(n<10)
{
printf("%d",n);
n++;//更新循环
}
if (n==10)
printf("循环结束");
return 0;
}
我们先从上面的例子看一下循环的概念,设定n为10,当n<10时,进入循环,执行打印n的值,之后n++的意思为n自增1,这样在经过十次打印后,n的值为10不满足循环,跳出循环,执行if语句,打印循环结束。
C语言中的函数是具有某种特定功能的代码块, 类似工厂中生产一件产品需要经过加工,分装,再加工等步骤,通过函数来封装,使其在一些重复的过程中大大节省时间。之后若再需使用这个函数,则只需调用一次即可,使代码不那么冗余。假如我们写个加法函数
#include
int ADD(int x,int y)
{
return x + y;
}
int main()
{
int a,b;
scanf("%d %d",a,b);
int sum = ADD(a,b);//传参,sum接收返回值
printf("%d",sum);//求和
}
之后就可以一劳永逸,调用我们的加法函数了。
数组可以存放一组元素类型相同的元素, 我们可以通过数组下标来初始化数组或者确定数组的大小。
char arr1[] = { 'a','b','c', '\0'};//下标默认4
char arr2[5] = {0};//不完全初始化,剩余元素自动放0
char arr3[4] = "ac";
char arr4[] = { 0 };//下标为默认为1
那下标是什么东西呢,我们如果想要查询数组中的某个元素,就需要用到下标,而语法规定下标始终从0开始的,这点也要牢记。例如查找下面数组第三个数组,用下标为2就能找到这个下标对应的值。
int arr[] = { 1,2,3,4,5,6 };//整型数组
printf("%d", arr[2]);
在访问数组的时候,有一点需要特别注意,输入的下标不能等于或超过其本身最大元素,这种行为被称为非法访问。这就好比你去非法入侵民宅一个道理,所以请不要这样做哦。