字符串
字符串常量
字符串常量是用双引号括起来的字符序列,且不可修改。
字符串常量在内存中是连续存放字符的ASCII码值,末尾会加“\0".(\0也是一个字符)
现在区别就来了,字符串“a”和字符“a”是不一样的,字符串“a”末尾会加\0,共占两个字节,而字符“a”只占一个字节。
字符串函数
C语言中操作字符串的函数
,使用时需包含头文件<string.h>
可以来看几个例子:
strlen(s1) | 返回字符串的长度,且不包含\0 |
strcmp(s1,s2) | s1,s2相同,返回值为0 s1<s2,返回值小于0 s1>s2,返回值大于0 |
比如:
#include<stdio.h>
#include<string.h>
void main()
{
printf("strlen=%d\n",strlen("friendship"));
printf("strcmp=%d\n",strcmp("friend","friendship"));
printf("strcmp=%d\n",strcmp("honey","dear"));
printf("strlen=%d\n",strlen("happy birthday"));
}
那我们可以得到其结果为:
运算符和表达式
表达式:由操作数和运算符组成的序列,类似于算数中的四则运算,其中的操作数可以是常量也可以是变量。
算数运算符 | + - * / ++ |
关系运算符 | > < == >= <= != |
逻辑运算符 | ! && |
位运算符 | << >> |
赋值运算符 | =及其扩展赋值运算符 |
条件运算符 | ?: |
逗号运算符 | , |
指针运算符 | * & |
求字节数运算符 | sizeof |
强制类型转换 | (类型) |
成员运算符 | ,-> |
下标运算符 | 【】 |
其他 | 如:调用函数运算符() |
如果对运算符所需要的操作数的个数来分类,那么运算符则可以分为:单目运算符,双目运算符,和三目运算符
单目运算符:对一个运算量进行运算,比如取负运算符
双目运算符:对两个运算量进行运算,比如算数运算符
三目运算符:C语言中,只有一个三目运算符,也就是条件运算符
C语言中存在优先级和结合性,即运算的先后顺序和优先级相同时运算的结合方向
在结合性中,除单目运算符,赋值运算符和条件运算符是右结合性外,其余都是左结合性
在优先级中,单目高于双目,双目高于三目,三目高于赋值,而在双目中,先后顺序为 算 数,移位,关系,位逻辑,逻辑
表达式求值
- 按运算符优先级进行
- 优先级相同,则按C语言规定的结合方向进行
(当然,我们也可以通过人为的加括号来改变优先级,以此来避免出现错误的概率)
运算符和表达式之算术
算数表达式:指用算数运算符和括号将运算量连接起来的式子
%为求余运算符,即结果为一个数除以另一个数的余数,其结果也是整数
- 两个实数相除,其结果为双精度实数
- 两个整数相除,其结果为整数
可以来看几个例子,比如:1/2=0 1.0/2=0.5
(1)在类型不同的数中,结果往往按照优先级高的类型来定,从高到低为——
- double,float
- double,unsigned,int,char,shot
(2)求余数运算
比如:
#include<stdio.h>
void main()
{
printf("%d\n",100%31);
printf("%d\n",-100%31);
printf("%d\n",100%-31);
printf("%d\n",-100%-31);
}
运行结果为:
其结果正负与求余运算符左边符号一致