文章目录
字符串和\0
C语言中如何表示字符串呢?如:“abcdef”,就是⼀个字符串,它需要用双引号括起来。
字符串的打印格式可以使用 %s 来打印,也可以双引号括起来直接打印:
C语言字符串中一个特殊的知识,就是在字符串的末尾隐藏放着一个\0字符,这个\0字符是字符串结束的标志。
调试:按F10,紧接着vs代码行出现箭头,上面出现方形红点
然后:调试——窗口——监视——随便点监视几——在名称中输入,例如输入一个字符串“abc”——点开输入的字符串
发现输入的是字符串“abc”,却还有一个“\0”,就说明这个字符串末尾隐藏着一个“\0”,所以我们看似敲的是“abc”,但是在内存上存放的是“a,b,c,\0”,这个"\0"是真实存在的
\0的重要性
C语言中也可以把⼀个字符串放在⼀个字符数组中,我们在这里利用下面的代码验证⼀下 \0 的功能。
int main()
{
char arr1[] = "abc";//创建一个字符型的数组叫arr1,将“abc”这个字符串放进去
char arr2[] = {'a','b','c'};//再创建一个数组将这三个字符放进去
return 0;
}
分别用arr1,arr2存以上数组,调试后它们的区别
发现当第一种写法arr1时,后面有一个\0
那么这两种写法在打印字符串的时候有什么区别呢?
第一种写法:因为字符串后面隐藏了一个\0,它是字符串结束的标志,所以在打印时到\0就停止打印了,不会多余打印。
第二种写法:因为arr1后面有结束标志,所以直接到那就结束打印了,而arr2后面没有,所以一直往内存后面打印,直到遇到\0了才结束,所以这种写法会有乱码
如果在第二种写法后面主动放一个\0,那么打印的就一样了
求字符串长度
strlen()函数
注:strlen()这个函数的作用是求字符串的长度的,全拼:string length(字符串长度)
使用strlen这个函数时,要包含#include <string.h>这个头文件
并且它在求字符串长度时,统计的是\0之前的字符的个数(不包含\0)
例如:
赋值操作符:=和复合赋值
在变量创建的时候给一个初始值叫初始化,在变量创建后,再给一个值,这叫赋值。
int a=100;//创建变量的同时给一个初始值,这叫初始化
a=200;//赋值
连续赋值
赋值操作符也可以连续赋值,如:
int a=3;
int b=5;
int c=0;
c=b=a+3;//连续赋值,从右向左依次赋值的
C语言虽然支持这种连续赋值,但是写出的代码不容易理解,建议还是拆开来写,这样方便观察代码的执行细节。
int a=3;
int b=5;
int c=0;
b=a+3;
c=b;
这样写,在调试的时候,每一次赋值的细节都是可以很方便观察的。
复合赋值符
在写代码时,我们经常可能对一个数进行自增,自减的操作,如下代码:
int a=10;
a=a+3;
a=a-2;
这样的代码C语言提供了更加方便的写法:
int a=10;
a+=3;
a-=2;
eg:
也可以用复合赋值符来写:
当然,减法也一样:
乘法也一样:
除法:
C语言提供了复合赋值符,方便我们编写代码,这些赋值符有:
+= -=
*= /= %=
>>= <<=//后面再做笔记
&= |= ^=
单目操作符:++,- -,+,-
前面介绍的操作符都是双目操作符,有2个操作数的,C语言中还有一些操作符只有一个操作数,被称为单目操作符。
++和- -
++是一种自增的操作符,又分为前置++和后置++,- -是一种自减的操作符,也分为前置- -和后置- -
例如:我们让a=5加上一个1,可以有四种写法:
int main()
{
int a=5;
//a=a+1;
//a+=1;
//a++;后置++
++a;//前置++
printf("%d",a);
return 0;
}
以上四种语句都可以使a加上一个1,最后打印出来都为6
前置++
int a=10;
int b=++a;//++的操作数是a,并且是放在a前面的,所以是前置++
printf("a=%d b=%d\n",a,b);
计算口诀:先加1,后使用
例如:
后置++
例如:
计算口诀:先使用,后加1
不论是前置还是后置,对于a自增1的
练习:
再换段代码:
因为63行代码是后置++,先使用(将a的值打印出来),再加1,所以到64行代码时才变成11
将它变为前置++呢?
此时63行代码是前置++,先加1(a=a+1),后使用(将a打印出来),所以执行到64行打印时a也为11
前置 - -
计算口诀:先-1,后使用
后置–
计算口诀:先使用,后-1
+和-
这里的+是正号,-是负号,都是单目操作符
运算符+对正负没有影响,是一个完全可以省略的运算符,但是写了也不会报错
int a=+10; 等价于 int a=10;
运算符-用来改变一个值的正负号,负数的前面加上-就会得到正数,正数的前面加上-会得到负数。
int a=10;
int b=-a;
int c=-10;
printf("b=%d c=%d\n",a,c);
//b=-10,c=-10
int a=-10;
int b=-a;
printf("b=%d\n",b);
//b=10
强制类型转换
在操作符中还有一种特殊的操作符是强制类型转换,语法形式如下:
(类型)
请看代码:
int a=3.14;
//a是int类型,3.14是double类型,
//将double类型赋给整型,编译器会报警告
//因为double是8个字节的数据,而整型是4个字节
为了消除这个警告,我们可以使用强制类型转换:
int a=(int)3.14;
//意思是将3.14的类型强制转换为int类型
//这种强制类型转换只能取整数部分
注:没强制类型转换打印出来也只能取整数部分,但是强制类型转换后编译器可以不报警告了
俗话说,强扭的瓜不甜,我们使用强制类型转换都是万不得已的时候使用,如果不需要强制类型转化就能实现代码,这样自然更好的。