文章目录
C语言学习第二节
接上一节继续学习,本节学习转义字符,语句与语句分类,数据类型
一、转义字符
(https://en.cppreference.com/w/c/language/escape.html)
1. 含义:转变原来意思的字符,如\n、\0
示例:
#include<stdio.h>
int main()
{
printf("abcndef\n");
printf("abc\ndef");
return 0;
}
结果为abcndef
abc
def
将n变为\n得到的结果不一样,转义字符将字符n的意思转变为换行
注意:变成转义字符后,字符长度为1,如:\与t一共有两个字符长度,但\t字符长度为1
(1)三字母词
- 如今编译器中无法验证三字母词,这里做简单的说明:编写代码时,出现
??)会变成],??(会变成[ - 这里使用转义字符
\?,防止编辑器将??)变成],??(变成[等,正常打印出??)、??(
示例:
#include<stdio.h>
int main()
{
printf("(are you ok??)\n");
printf("(are you ok\?\?)");
return 0;
}
结果为(are you ok??)
(are you ok??)
- 这里结果一致是由于现在的编辑器默认不启用三字母词,其实第一个结果应
(are you ok],这里一般仍利用转义字符打印字符
(2)常见转义字符
\?在书写连续多个问号使用,防止他们被解析成三字⺟词,在新的编译器上没法验证了\'表示字符常量’\"表示一个字符串内部的双引号\\表示一个反斜杠,防止它被解释为一个转义序列符——经常打印路径\a警报,这会使得终端发出警报声或出现闪烁,或者两者同时发生\b退格键,光标回退一个字符,但不删除字符;并且使用多少\b,光标将会回退多少个字符——观察其作用时,用F10快捷键\f换页符,光标移到下⼀页。在现代系统上,这已经反映不出来了,行为改成类似于\v\n换行符\r回车符,光标移到同一行的开头\t水平制表符,光标移到下一个水平制表位,通常是下⼀个4或8的倍数;占8个字符——输出对齐信息时使用\v垂直分隔符,光标移到下一个垂直制表位,通常是下一行的同⼀列\ddd表示八进制的转义字符,d d d表示八进制下的三个数(可以d,dd,ddd,最多三个数)——八进制下的数为0-7,即\130是八进制下的转义字符,但是\180不是八进制下的转义字符\xdd表示十六进制的转义字符,x是固定的,d d表示十六进制下的两个数(可以d,dd,最多两个数)——十六进制下的数为0-15\0NULL字符,是转义字符\ddd中的一种,其ASCII码值为0
示例:
#include<string.h>
#include<stdio.h>
//数清字符串的长度,尤其注意转义字符;这里判断哪些是字符,哪些是转义字符
int main()
{
int len1 = strlen("c:\test\145\besr.c");
printf("%d\n",len1);
int len2 = strlen("c:\test\145\1besr.c");
printf("%d\n", len2);
return 0;
}
//\ddd与\xdd分别表示八进制与十六进制的转义字符
int main()
{
printf("%c\n", '\243');//243是八进制,换成十进制为163,ASCII码表中十进制163对应的字符为?
printf("%c\n", '\x56');//56是十六进制,换成十进制为86,ASCII码表中十进制163对应的字符为V
return 0;
}
//\t水平制表符,保证信息对齐
int main()
{
printf("a\taa\taaa\taaaa\t\n");
printf("bb\tbbb\tbbbb\tbbbbb\t\n");
return 0;
}
//\r光标移到同一行开头
int main()
{
printf("abcdef\r");
return 0;
}
//\b光标回退到前一个字符,后面有多少个\b光标就回退到前多少个字符
int main()
{
printf("abcdef");
printf("\b");
printf("xxx");
return 0;
}
int main()
{
printf("abcdef\b\b\b");
return 0;
}
int main()
{
printf("abcdef\n");
printf("a\bcdef\b");
return 0;
}
//\a发出警告
int main()
{
printf("%c\n", '\'');
printf("%s\n", "\"");
printf("G:\test\file\bVC\n");//假设为一个文件路径
printf("G:\\test\\file\\bVC\n");
printf("\a");
return 0;
}
int main()
{
printf("(are you ok??)\n");
printf("(are you ok\?\?)");
return 0;
}
//\n换行
int main()
{
printf("abcndef\n");
printf("abc\ndef");
return 0;
}
(1)13;14
(2)?;V
(3)
a aa aaa aaaa
bb bbb bbbb bbbbb
(4)按F10进行操作,可以看到光标在第一个字符处
(5)(6)(7)按F10进行操作
(8)' ;" ;G: est ilVC; G:\test\file\bVC
二、语句与语句分类
C语言代码语句共有五种分类:空语句,表达式语句,函数调用语句,复合语句,控制语句
1.空语句
- 一个分号
;就是一个语句,称空语句 - 应用场景:需要一个语句,但是不需要他起作用,可用空语句
代码如下:
#include<stdio.h>
int main()
{
;//空语句
return 0;
}
2.表达式语句
- 表达式之后加一个
;就是一个语句,表达式如:a+b,b+c,int a=5
代码如下:
int main()
{
int a = 5;
int b = 6;
a + b;
return 0;
}
3.函数调用语句
- 调用函数后加分号
;——函数调用语句
代码示例:
int main()
{
printf("abcdef");
return 0;
}
4.复合语句
- 一整个代码块,如上一节输出ASCII码值从32到127的字符
int main()
{
int i = 0;
for (i = 32; i <= 177; i++);
{
printf("%d ", i);
}
return 0;
}
5.控制语句——之后一一介绍
- 包含三种结构:顺序结构、选择结构、循环结构;C语言中包含九种控制语句
- 条件判断语句(分支语句)——if语句、switch语句
- 循环执行语句——do while语句、while语句、for语句
- 转向语句——continue语句、goto语句、break语句、return语句
三、数据类型、signed、unsigned
C语言数据类型包含内置类型与自定义类型
1.内置类型(C语言自带)
整型家族包含字符型与整型,signed与unsigned是修饰整型家族数据类型的关键词
signed——数据带有符号的,有正负号,如温度、海拔unsigned——数据不带有符号的,只有0与正整数——较于signed,数据类型的取值在同样长度内存的最大整数值会大一倍- 下面[]里面的内容可以省略
(1)字符型——char
- 取自字符英文——character
char a;//字符型
signed char a;//有符号的字符型,这里的signed char不等于char,signed不可隐藏
unsigned char a;//无符号的字符型
(2)整型
- 取自整型英文——integer
- short [int]——short——短整型
- int——整型
- long [int]——long——长整型
- long long [int]——long long——更长的整型
short a;//短整型
int a;//整型
long a;//长整型
long long a;//更长的整型
signed int a;=[signed] int a;//这里signed可以省略,有符号的整形
unsigned int a;//这里不可省略,无符号的整型
signed short a;=[signed] short a;
unsigned short a;
signed long a;=[signed] long a;
unsigned long a;
signed long long a;=[signed] long long a;
unsigned long long a;
(3)浮点型
这里不介绍signed与unsigned
- float
- double
- long double
//浮点型
float a;
double a;
long double a;
(4)布尔类型
- 表示真假的类型——_Bool
- 使用库函数
include<stdbool.h>
代码示例:
#include<stdio.h>
#include<stdbool.h>//引用_Bool
//可以使用_Bool或者bool
int main()
{
bool flag1 = false;//假
bool flag2 = true;//真
if (flag1)
{
printf("haha\n");
}
if (flag2)
{
printf("hehe");
}
return 0;
}
int main()
{
_Bool flag1 = false;
_Bool flag2 = true;
if (flag1)
{
printf("haha\n");
}
if (flag2)
{
printf("hehe");
}
return 0;
}
int main()
{
_Bool flag1 = true;
_Bool flag2 = true;
if (flag1)
{
printf("haha\n");
}
if (flag2)
{
printf("hehe");
}
return 0;
}
int main()
{
_Bool flag1 = false;
_Bool flag2 = false;
if (flag1)
{
printf("haha\n");
}
if (flag2)
{
printf("hehe");
}
return 0;
}
(1) (2)输出hehe
(3)都输出
(4)都不输出
2.自定义类型(可以创造的类型)
- 数组
- 结构体——struct
- 枚举——enum
- 联合体——union
3. signed与unsigned
signed——数据带有符号的,有正负号,如温度、海拔——%d打印unsigned——数据不带有符号的,只有0与正整数——较于signed,数据类型的取值在同样长度内存的最大整数值会大一倍——%u打印- 分出
signed与unsigned是为让计算机更好的实现,比如对于身高只有正值,可以使用int、unsigned int,但使用unsigned int可以更好的限制范围
代码示例:
#include <limits.h>
#include <stdio.h>
//%d——打印有符号的数据类型
//%u——打印无符号的数据类型
int main()
{
int a = 100;
unsigned int b = 200;
printf("%d\n", a);
printf("%u\n", b);
int c = -100;
printf("%d\n", c);
printf("%u\n", c);
return 0;
}
100 200 -100 4294967196
最后一个结果可知有符号的数据类型是不可以用%u打印的,出现错误
四、数据类型长度与取值范围
(https://en.cppreference.com/w/c/language/arithmetic_types.html#.E6.95.B0.E6.8D.AE.E6.A8.A1.E5.9E.8B)
1.sizeof
- 计算sizeof操作符数的类型的长度,单位字节——计算的是类型的长度,单位是字节(Byte)
- 1字节=8 bit, bit为计算机二进制中1,0存储的空间(就是一个小格子)
- sizeof(变量)——sizeof(m)或sizeof m——这里可以脱去括号
- sizeof(数据类型)——sizeof(int)——这里不能脱括号,必须有括号
- sizeof(表达式)——sizeof(3+5)——这不参与括号内的运算,只是计算数据类型长度,看示例
- %zu——在printf函数中打印
代码示例一——计算各个数据类型的长度
#include<string.h>
#include<stdio.h>
#include<stdbool.h>//引用_Bool
int main()
{
int m = 5;
//sizeof(m);
//sizeof m;
//sizeof(int);
//sizeof(3+5);
printf("%zu\n", sizeof m);//int长度
printf("%zu\n", sizeof(m));//int长度
printf("%zu\n", sizeof(int));//int长度
printf("%zu\n", sizeof(3+5));//int长度
printf("%zu\n", sizeof(char));//char长度
printf("%zu\n", sizeof(_Bool));//_Bool长度
printf("%zu\n", sizeof(short));//short长度
printf("%zu\n", sizeof(int));//int长度
printf("%zu\n", sizeof(long));//long长度——有可能是4个字节,也有可能是八个字节(取决于数据模型)
printf("%zu\n", sizeof(long long));//long long长度——固定的八个字节
printf("%zu\n", sizeof(float));//float长度
printf("%zu\n", sizeof(double));//double长度
printf("%zu\n", sizeof(long double));//long double长度——有可能是8个字节,也有可能是16个字节(取决于数据模型)
return 0;
}
4 4 4 4 1 1 2 4 4 8 4 8 8
代码示例二——sizeof不计算括号内的运算
#include<stdio.h>
int main()
{
short s=5;
int a=10;
printf("%zu\n", sizeof(s = a + 5));
printf("%d\n", s);
return 0;
}
2;5——直接输出的是short的长度,并且输出的s值不是15,而是5,说明sizeof不进行括号内的运算
2.取值范围——数据类型中存储的数值的最大值最小值区间
- 对于数据类型的取值范围可以搜索头文件
limits.h与float.h,只需记住前面名称即可 - 若要打印出某个数据类型的最大值,需要记清楚名称,%d打印,并且使用头文件
limits.h与float.h
代码示例:
#include <limits.h>
#include <stdio.h>
//打印有符号int类型的最大值
int main()
{
printf("%d\n", INT_MAX);
return 0;
}
总结
以上就是今天要讲的内容,本文仅仅简单介绍了数据类型与计算数据类型长度,接下来会详细介绍变量

1万+

被折叠的 条评论
为什么被折叠?



