C语言基础(上)
一. 第一个C语言程序
#include<stdio.h>
int main()
{
printf("Hello world");
return 0;
}
xxx.c 叫做源文件
xxx.h 叫做头文件
在VS2022中创建的步骤
step1. 创建(文件名称后要加上.c)
step2 创建源文件(方法:在解决方案管理器中找到源文件,右击鼠标找到添加,再找到新建项即可创建)
注意:c语言的源文件命名末尾应该为.c,一般默认是xxx.cpp(这是c++的文件),所以要改过来
step3 开始写文件
二. printf和库函数
这⾥简单的介绍⼀下 printf , printf 是⼀个库函数,它的功能是在标准输出设备(⼀般指屏幕)上进⾏信息的打印。上⾯的代码是使⽤ printf 函数打印字符串。只要把想要打印的⼀串字符放在双引号中并传递给printf函数就可以打印。
同时printf也可以打印其他类型的数据,例如:
printf("%d\n", 'm' );
从上面的代码可以发现%d这一陌生的符号,它的名字叫占位符,会被后面的指替换
注意:当我们使用库函数的时候,是要包含头文件的,例如:在用printf时需要包含的就是stdio.h这个头文件
#include<stdio.h>
三.字符与ASCLL编码
在键盘上可以敲出各种字符,如:a,q,@,#等,这些符号都被称为字符,C语⾔中字符是⽤单引号
括起来的,如:‘a’, ‘b’,‘@’,‘#’等。
我们知道在计算机中所有的数据都是以⼆进制的形式存储的,那这些字符在内存中分别以什么样的⼆进制存储的呢?如果我们每个⼈⾃⼰给这些字符中的每个字符编⼀个⼆进制序列,这个叫做编码,为了⽅便⼤家相互通信,不造成混乱,后来美国国家标准学会(ANSI)出台了⼀个标准?ASCII编码, C语⾔中的字符就遵循了?ASCII编码的⽅式。
这张表不需要死记硬背,只要在面对字符是能找到对应的十进制数字即可
四. 字符串与\0
1.字符串的定义:由双引号引起的东西叫做字符串,例如:“abc”
2.\0
注:此处先使用数组举例子,后面的文章会详细解释.%s的作用是打印字符串(后面会有一个大总结)
#include<stdio.h>
Int main()
{
char arr1[ ]="abc";
char arr2[ ]={'a','b','c'};
printf("arr1=%s\n",arr1);
printf("arr2=%s\n",arr2);
return 0;
}
这是打印出来的结果是
arr1=abc
arr2=abc烫烫烫…
由此我们可以发现在arr2这个数组中出现乱码的现象,其实问题就是arr1中有\0,而arr2中没有\0
下面我将详细的介绍\0:
1.\0是字符串结束的标志,也就是说如果字符后没有\0,那么电脑是无法识别打印的长度,因此会出现arr2的输出结果
2.\0不是字符串内容,就如arr1中\0并没有出现,因为在字符串中\0是可以省略的,但是在arr2这里是不可省略的,如果不想出现乱码,则应改为
```
char arr2[ ]={'a','b','c','\0'};
```
下面再举一个例子能更好的理解\0
int main()
{
char arr1[ ]="abc";
char arr2[ ]={'a','b','c'};
printf("arr1=%d\n",strlen(arr1));//%d:打印整形(有符号的整形),strlen是用来计算字符串长度的
printf("arr2=%d\n",strlen(arr2));
return 0;
}
输出结果为
arr1=3
arr2=随机值
因此可以看出\0是字符串结束的标志,因为arr2没有\0,所以计算机会默认继续往后数,知道数到\0为止。
五. 转义字符
也许在前⾯的代码中你看到 \n , \0 很纳闷是啥。其实在字符中有⼀组特殊的字符是转义字符,转义
字符顾名思义:转变原来的意思的字符。
\n 是⼀个转义字符表⽰换⾏的意思,我们可以简单的理解为 \ 让 n 的意思
发⽣了转变, n 本来是⼀个普通的字符,被 \ 转义为换⾏的意思。
C语⾔中像这样的转义字符还有⼀些,具体如下:
\‘:⽤于表⽰字符常量’
printf("%c\n",'''); //此时输出是错误的,如果只想打印一个单引号则应改为 parintf(“%c\n”,'\'');
\":⽤于表⽰⼀个字符串内部的双引号
\ :⽤于表⽰⼀个反斜杠,防⽌它被解释为⼀个转义序列符。
\\:用于表示一个反斜杠,防止它被解释成一个转义字符
\a :警报,这会使得终端发出警报声或出现闪烁,或者两者同时发⽣。
\b :退格键,光标回退⼀个字符,但不删除字符。
\f :换⻚符,光标移到下⼀⻚。在现代系统上,这已经反映不出来了,⾏为改成类似于 \v 。
\n :换⾏符。
\r :回⻋符,光标移到同⼀⾏的开头。
\t :制表符,光标移到下⼀个⽔平制表位,通常是下⼀个8的倍数(其实就是空了一个大格)
\v :垂直分隔符,光标移到下⼀个垂直制表位,通常是下⼀⾏的同⼀列。
\ddd: ddd为1-3个8进制数字
include<stdio.h>
int main()
{
printf("%d\n,strlen("c:\test\32\test.c"));
return0;
}
\32:注32是两个8进制数组成,所以在计算字符串长度时要把\32看作一个字符串
printf("%c\n",'\134');
先把132转换为十进制 所以1乘8的2次方+3乘8的1次方+2乘8的0次方=90,然后进行查ASCLL表可得字母Z
\xdd: dd表示2个十六进制数字
printf("%c\n",'\x61');
\x61:注61是两个16进制数字,所以转换成10进制数即可61=6乘16的一次方+1乘16的0次方=97,最后查ASCLL表可得答案为a
六. 语句
c语言的代码是由一条条语句组成的,那么下面将介绍语句的分类
-
空语句
-
表达式语句
-
函数调用语句
-
复合语句
-
控制语句
-
空语句:一个分号就是一条语句,这个就叫做空语句
include<stdio.h> int main() { ; return 0; }
-
表达式语句:就是表达式后面加上分号
例如:int a=1;这个就叫做表达式语句
-
函数调用语句;例子:printf(“hello\n”);
-
控制语句:用于控制程序的执行流程,以实现程序的各种方式(c语言的三种结构:顺序结构,选择结构,循环结构),它们由特定的语句定义符组成,c语言有九种控制语句
1.条件判断语句也叫分⽀语句:if语句、switch语句
2.循环执⾏语句:do?while语句、while语句、for语句
3.转向语句:break语句、goto语句、continue语句、return语句
-
七. 注释
尽量使用//来注释,在vs2022中有批量注释的快捷键
八. 数据类型
数据类型 | 中文 | 字节 |
---|---|---|
char | 字符数据(a,b,c) | 1 |
short | 短整型 | 2 |
int | 整型(整数) | 4 |
long | 长整型 | 4 |
float | 单精度浮点数(小数) | 4 |
double | 双精度浮点数 | 8 |
关于字节的介绍:
字节是计算机的单位
-
bit:比特位
-
byte:字节
-
kb:1kb=1024byte
-
mb:1mb=1024kb
-
tb: 1tb=1024mb
-
pb: 1pb=1024tb
-
…
1 byte =8bit 即 1字节=8比特位
九. signed 与unsigned
作用:用于修饰字符型和整型
signed:表示一个类型带有正负号
unsigned:只能表示0和正整数
int:有符号的int就等价于 signed int (有符号整型)可以简写成int
unsigned int :无符号整型
整数变量声明为 unsigned 的好处是,同样⻓度的内存能够表⽰的最⼤整数值,增⼤了⼀倍。
⽐如,16位的 signed short int 的取值范围是:-32768~32767,最⼤是32767;⽽
unsigned short int 的取值范围是:0~65535,最⼤值增⼤到了65,535。32位的 signed
int 的取值范围可以参看 limits.h 中给出的定义
注意:C语⾔规定 char 类型默认是否带有正负号,由当前系统决定。
这就是说, char 不等同于 signed char ,它有可能是 signed char ,也有可能是
unsigned char ,这⼀点与 int 不同, int 就是等同于 signed int