C语言——字符串,赋值,单目操作符,强制类型转换详解

字符串和\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类型
//这种强制类型转换只能取整数部分

注:没强制类型转换打印出来也只能取整数部分,但是强制类型转换后编译器可以不报警告了

在这里插入图片描述
俗话说,强扭的瓜不甜,我们使用强制类型转换都是万不得已的时候使用,如果不需要强制类型转化就能实现代码,这样自然更好的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值