C语言入门
第一个语言程序
#include <stdio.h>
int main()
{
printf("hello C\n");
return 0;
}
main函数
-
是程序的入口
-
有且仅有一个
-
可以放在任意位置
printf函数和库函数
- 用来打印输出
- 必须包含头文件
<stdio.h>
一个系列的库函数一般会声明在同一个头文件中,库函数的使用,要包含在对应的头文件中。
关键字
-
关键字都有特殊的意义,是保留给C语⾔使⽤的 。
-
程序员⾃⼰在创建标识符的时候是不能和关键字重复的 。
-
关键字也是不能⾃⼰创建的。
C语言的32个关键字
1 auto break case char const continue default do double else enum
2 ex float for goto if long register return short signed sizeof
3 struct switch typedef union unsigned void volatile while
注:在C99标准中加入了 inline
、restrict
、_Bool
、_Comploex
、_Imaginary
等关键字。
字符和ASCII编码
在键盘上可以敲出各种字符,如:a,q,@,#等,这些符号都被称为字符,C语⾔中字符是⽤单引号 括起来的,如:‘a’,‘b’,‘@’。
ASCII码表
下列码表包含有全部128个ASCII 十进制(Dec)、八进制(Oct)、十六进制(hex)及字符(ch)编码。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UTEoXybI-1690260903564)(C:\Users\luo84\AppData\Roaming\Typora\typora-user-images\image-20230722112443963.png)]
-
字符AZ的ASCII码值从6590
-
字符az的ASCII码值从97122
-
对应的⼤⼩写字符(a和A)的ASCII码值的差值是32
-
数字字符09的ASCII码值从4857
-
换⾏ \n 的ASCII值是:10
-
在这些字符中ASCII码值从0~31 这32个字符是不可打印字符,⽆法打印在屏幕上观察
单个字符打印可以使用 %c
来指定格式:
#include <stdio.h>
int main()
{
printf("%c\n",'Q');
printf("%c\n",81);//这里的81是字符Q的ASCII码值,可以正常打印
return 0;
}
打印字符展示:
#include <stdio.h>
int main()
{
int i = 0;
for (i = 32; i <= 127; i++)
{
printf("%c ", i);
if (i % 16 == 15)
printf("\n");
}
return 0;
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AVngu6UP-1690260903565)(C:\Users\luo84\AppData\Roaming\Typora\typora-user-images\image-20230722122503080.png)]
字符串和\0
字符串
C语言中,使用双引号括起来的一串字符就被成为字符串,如:“abcdef”
字符串打印格式使用 %s
来指定,也可以直接打印:
#include <stdio.h>
int main()
{
printf("%s\n","hello");
printf("hello");
return 0;
}
字符\0
C语⾔字符串中⼀个特殊的知识,就是在字符串的末尾隐藏放着⼀个 \0 字符,这个 \0 字符是字符串 的结束标志。
C语言也可以把一个字符串放在一个字符数组中:
#include <stdio.h>
int main()
{
char arr1[] = { 'a','b','c' }; //在arr1中存放三个字符
char arr2[] = "abc"; //在arr2中存放一个字符串
printf("%s\n", arr1);
printf("%s\n", arr2);
return 0;
}
调试的时候,观察 arr1
和 arr2
的内容:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EgXcuPso-1690260903565)(C:\Users\luo84\AppData\Roaming\Typora\typora-user-images\image-20230725093242596.png)]
在观察运行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YLizYEls-1690260903566)(C:\Users\luo84\AppData\Roaming\Typora\typora-user-images\image-20230725093415154.png)]
可以看到,arr1
在打印的时候,打印了 我们规定的字符后,还打印了一些随机值。这就是因为在 arr1
末尾的地方没有\0
字符作为结束标志,打印的时候没有停止。
但是 arr2
是完全正常的,因为arr2
数组是使用字符串常量初始化的,数组中有\0
作为结束标志,打印可以正常结束。
如果在数组中单独放一个’\0’呢?
#include <stdio.h>
int main()
{
char arr1[] = { 'a','b','c','\0'};
char arr2[] = "abc";
printf("%s\n", arr1);
printf("%s\n", arr2);
printf("%s\n", "abc\0def");
return 0;
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hIz6Lim2-1690260903566)(C:\Users\luo84\AppData\Roaming\Typora\typora-user-images\image-20230725094456487.png)]
三次打印的结果是一样的,都是打印到 \0
就结束了,这样我们可以更直观的看出 \0
的作用和重要性。
转义字符
在字符中有如上解释过的 \n
,\0
,它们是字符中的一组特殊的字符——转义字符,顾名思义:转变原来的字符的意思。
例:字符 n
,在字符串中打印可以直接打印出来:
#include <stdio.h>
int main()
{
printf("abcnedf");
return 0;
}