史上最全C语言概念,超详细,800年难遇

一、C语言是什么

1.1 概念

C语言是人和计算机交流的计算机语言
举个例子:

人 -- 人 :汉语、英语、法语 --**自然语言**
人 -- 计算机: Java、C、C++ -- 计算机语言

1.2 编译和链接

C语言是编译型计算机语言,C语言原代码都是文本文件,本身无法运行,必须通过编译器翻译和链接器的链接,生成二进制的可执行的文件。下图演示了源程序经过编译器和链接器处理的过程
在这里插入图片描述

注:
1.每个源文件(.c)单独经过编译器处理生成对应的目标文件(obj.为后缀的文件)
2.多个目标文件和库文件经过链接器处理生成对应的可执行程序(.exe文件)

1.3源文件和头文件的介绍

C语言把 .c 为后缀的文件称为源文件,把 .h 为后缀的文件称为头文件

二、第一个C语言程序

#include <stdio.h>

int main()
{
	printf("hello\n");
	return 0;
}

在VS2022上按快捷键 Ctrl + F5 即可运行。

三、两个常用函数和库函数的介绍

1.main函数

C语言程序不管有多少行代码,都是从 main 函数开始执行的, main 函数是程序的入口,也被称为 主函数main 前面的 int 表示 main 函数执行结束的返回类型—— 整型 。所以在 main 函数的最后写 return 0; 前后呼应。

main函数注意事项

  • main函数是程序的入口
  • main函数有且只有一个

main函数易错总结

  • main被写成了 mian
  • main后边的 () 漏掉了
  • 代码中不能出现中文符号,比如中文括号和中文分号
  • 一条语句结束后,要有分号

2.printf函数

上述代码中

printf("hello world\n")

使用了 printf 函数,实现了 打印 功能。
这里 printf 是一个 库函数 ,它的功能是在标准输出设备(一般指屏幕)上进行信息打印。
printf 函数可以打印很多类型的数据,比如:

int n = 100;
printf("%d\n",n);    //100      -- 整型
printf("%c\n",'q‘);  //q        -- 字符
printf("$f\n",3.14); //3.140000 -- 单精度浮点型
这里的 ==%d== 、 ==%c== 和 ==%f== 都是 **占位符** ,会被后面的值替换。

**注意:printf函数需要包含头文件 stdio.h ,具体方法就是:

#include <stdio.h>

3.库函数

为了步再重复常见代码,让程序员提升开发效率,C语言规定一组函数,这些函数组成一个函数库,被称为 标准库 ,这些函数也被称为 库函数
一系列的库函数一般会声明在同一个头文件中,所以 库函数的使用,必须要包含对应的头文件

库函数比较多,可参考cplusplus网站

四、关键字介绍

关键字 也被称为 保留字

  • 关键字都有特殊的意义,是留给C语言使用的

  • 自己创建标识符时,不能和 关键字重复

  • 关键字也是不能自己创建的

    C语言的 32个关键字 如下

1 auto  break  case  char  const  continue  default  do  double  else  enum  extern
2 float  for  goto  if  int  long  register  return  short  signed  sizeof  static  
3 struct  switch  typedef  union  unsigned  void  volatile  while

注: 在C99标准中加入了 inlinerestrict_Bool_Complex_Imaginary 等关键字

五、字符和ASCII编码

我们知道在计算机中所有的数据都是以 二进制 的形式存储的,如果给这些字符编一个二进制序列,这个就叫做 编码 ,C语言中的字符遵循 ASCII 编码的方式
ASCII码表
在这里插入图片描述
ASCII码表不需要记忆,现用现查,网址:https://zh.cppreference.com/w/cpp/language/ascii

记住几组常见的数据:

  • 字符A ~ Z的ASCII码值从65 ~ 90
  • 字符a ~ z的ASCII码值从97 ~ 122
  • 对应大小写字符的ASCII码值相差32(小写的大)
  • 数字0 ~ 9的ASCII码值从48 ~ 57
  • 换行 \n 的ASCII码值是 10
  • ASCII码值从0 ~ 31 的32个字符是不可打印字符,无法打印在屏幕上观察

例:
单个字符的打印可用%c来指定格式

#include <stdio.h>

int main()
{
	printf("%c\n",'Q');
	printf("%c\n",81); //这里的81是字符Q的ASCII码值,打印Q
	
	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;
}

运行结果如下:
在这里插入图片描述

六、字符串和\0

6.1 字符串

使用 双引号 括起来的一 字符是 字符串 —— %s
使用 单引号 括起来的一 字符是 字符 ——%c

#include <stdio.h>

int main()
{
	printf("%s\n", "hello C");
	printf("hello C");
	return 0;
}

在这里插入图片描述

6.2 \0

C语言字符串中一个特殊的知识,就是在字符串的末尾会隐藏 \0 ,这个 \0 字符就是字符串 结束标志
下面我门调试看一下
在这里插入图片描述
对于字符串”abcdef“,我们实际上看到了6个字符:a ,b ,c ,d ,e ,f ,但实际上在末尾还隐藏一个 \0 的转义字符, \0字符串结束的标志 。所以我们在使用库函数 printf() 打印字符串或 strlen() 计算字符串长度的时候,遇到 \0 的时候就 自动停止 了。
下面让我们来验证 \0 的功能

#include <stdio.h>

int main()
{
	char arr1[] = { 'a','b','c' }; // arr1数组中存放3个字符
	char arr2[] = "abc"; // arr2数组中存放字符串
	printf("%s\n", arr1);
	printf("%s\n", arr2);
}

输出的结果为:
在这里插入图片描述
现在让我们调试看下什么情况
在这里插入图片描述
哦,原来arr1中没有 \0 来作为结束标注,所以输出玩abc后会继续往后输出,直到找到 \0 为止。
那如果我们单独在arr1中手动加入 \0,输出会不会发生改变呢

#include <stdio.h>

int main()
{
	char arr1[] = { 'a','b','c','\0' }; // arr1数组中存放3个字符
	char arr2[] = "abc"; // arr2数组中存放字符串
	printf("%s\n", arr1);
	printf("%s\n", arr2);
}

输出结果为:
在这里插入图片描述
果然,就是 \0 惹的祸!!!从上述可以看出 \0 的重要性

七、转义字符

转义字符 ,顾名思义,就是:转变原来的意思的字符。
下面让我们来几个例子

#include <stdio.h>

int main()
{
	printf("abcndef\n");
	printf("abc\ndef");
	return 0;
}

输出结果为:
在这里插入图片描述
‘n’ 是一个字符,而 \n 是表示换行的意思。
C语言还有好多转义字符,具体如下:

  • \? :在书写连续多个问号时使用,防止它们被解析成三字母词
  • \’ :表示字符常量
  • \" :表示一个字符串内部的双引号
  • \\ :用于表示一个反斜杠,防止被解释为一个转义字符
  • \a :发出警报声或出现闪烁,或者同时发生
  • \b :退格键,光标回退一个字符,但不删除字符
  • \f :换页符,光标移动到下一页。(一般没用)
  • \r :回车符,光标移动到同一行的开头
  • \t :制表符,光标移动到下一个水平制表位,通常是下一个4/8的倍数
  • \v :垂直分隔符,光标移动到下一个垂直指标为,通常是下一行的同一列

下面两种转义字符代表 8进制16进制 表示形式:

  • \ddd :d d d表示1 ~ 3个进制的数字。 eg: \130 : 其实就是88,表示字符X
  • \xdd :d d表示2个十六进制数字。 eg: \x30 :其实就是48,表示字符0
    \0 :null字符,代表没有内容, \0 就是 \ddd 这类转义字符的一种,用于字符串的结束标志,其ASCII码值为0.
  • 26
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值