考研复习c语言初阶(1)

本人准备考研,现在开始每天更新408的内容,目标这个月结束C语言和数据结构,每天更新~

一.再次认识c语言

C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易

的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语

言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的

C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超

级电脑等作业平台。

二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制

定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。 1 目前2011年12月8

日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标

准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉

字编程。

C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。

其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等

1.第一个c语言程序

复制代码
#include <stdio.h>
int main()
{
  printf("hello bit\n");
  printf("he he\n");
  return 0;
}

//解释:

//main函数是程序的入口

//一个工程中main函数有且仅有一个

2.数据类型

复制代码
char     //字符数据类型
short    //短整型
int     //整形
long     //长整型
long long  //更长的整形
float    //单精度浮点数
double    //双精度浮点数

C语言没有字符串类型,C++有string类

每个类型的大小?

复制代码
#include <stdio.h>
int main()
{
  printf("%d\n", sizeof(char));
  printf("%d\n", sizeof(short));
  printf("%d\n", sizeof(int));
  printf("%d\n", sizeof(long));
  printf("%d\n", sizeof(long long));
  printf("%d\n", sizeof(float));
  printf("%d\n", sizeof(double));
  printf("%d\n", sizeof(long double));
  return 0;
}

3.变量与常量

3.1全局变量与局部变量

复制代码
#include <stdio.h>
int global = 2019;//全局变量
int main()
{
  int local = 2018;//局部变量
  //下面定义的global会不会有问题?
  int global = 2020;//局部变量
  printf("global = %d\n", global);
  return 0;
}

总结:

上面的局部变量global变量的定义其实没有什么问题的!

当局部变量和全局变量同名的时候,局部变量优先使用。

3.2作用域与生命周期

作用域:

作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用

而限定这个名字的可用性的代码范围就是这个名字的作用域。

  1. 局部变量的作用域是变量所在的局部范围。

  2. 全局变量的作用域是整个工程。

生命周期:

变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段

  1. 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。

  2. 全局变量的生命周期是:整个程序的生命周期。

3.3常量类型

C语言中的常量和变量的定义的形式有所差异。

C语言中的常量分为以下以下几种:

字面常量

const 修饰的常变量

#define 定义的标识符常量

枚举常量

#include <stdio.h

复制代码
#include <stdio.h>
//举例
enum Sex
{
MALE,
FEMALE,
SECRET
};
//括号中的MALE,FEMALE,SECRET是枚举常量
int main()
{
  //字面常量演示
  3.14;//字面常量
  1000;//字面常量
 
  //const 修饰的常变量
  const float pai = 3.14f;  //这里的pai是const修饰的常变量
  pai = 5.14;//是不能直接修改的!
 
  //#define的标识符常量 演示
#define MAX 100
  printf("max = %d\n", MAX);
 
  //枚举常量演示
  printf("%d\n", MALE);
  printf("%d\n", FEMALE);
  printf("%d\n", SECRET);
  //注:枚举常量的默认是从0开始,依次向下递增1的
  return 0;
}

注:

上面例子上的 pai 被称为 const 修饰的常变量, const 修饰的常变量在C语言中只是在语法层面限制了

变量 pai 不能直接被改变,但是 pai 本质上还是一个变量的,所以叫常变量。

4. 字符串+转义字符+注释

4.1字符串

复制代码
"hello bit.\n"

这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串。

注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。

复制代码
#include <stdio.h>
//下面代码,打印结果是什么?为什么?(突出'\0'的重要性)
int main()
{
  char arr1[] = "bit";
  char arr2[] = {'b', 'i', 't'};
  char arr3[] = {'b', 'i', 't', '\0'};
  printf("%s\n", arr1);
  printf("%s\n", arr2);
  printf("%s\n", arr3);
  return 0;
}

arr1和arr3可以正常输出bit,但是arr2在输出bit后可能还会出现一些乱码,因为在内存中他的地址往后访问还要找"\0",才能结束。

4.2 转义字符

加入我们要在屏幕上打印一个目录: c:\code\test.c

我们该如何写代码?

复制代码
#include <stdio.h>
int main()
{
printf("c:\code\test.c\n");
  return 0;

实际上程序运行的结果是这样的:

这里就不得不提一下转义字符了。转义字符顾名思义就是转变意思。

复制代码
#include <stdio.h>
int main()
{
  //问题1:在屏幕上打印一个单引号',怎么做?
  //问题2:在屏幕上打印一个字符串,字符串的内容是一个双引号",怎么做?
  printf("%c\n", '\'');
  printf("%s\n", "\"");
  return 0;
}

问题:

复制代码
//程序输出什么?
#include <stdio.h>
int main()
{
  printf("%d\n", strlen("abcdef"));
  // \62被解析成一个转义字符
  printf("%d\n", strlen("c:\test\628\test.c"));
  return 0:
}

答案是输出6和14,因为\t,\62,\t被当成转义字符,只算一个字符了。

尤其要注意的是\DDD和\XDD这两个转义字符,既然是字符,我们知道计算机存字符unsigned char类型的数据范围是0-255,那么表示的asc码值也应该在255内,所以即使使用\DDD存数据最大也不能超过\400(8进制400等于十进制256)。

另外一定记住\DDD和\XHH所表示的意思:\DDD是将\后三个八进制数字对应的十进制数字的ASC码值所存储,也就是说这个转义字符真正是一个ASC码值,同理\XHH是两个十六进制数字所对应的十进制数字的ASC码值所存储。如果遇到了不满规则的数字,则会直接忽略:

比如

复制代码
#include <stdio.h>
#include <string.h>
int main()
{
	char s[] = "\x1h\018";
	printf("字符总数:%d\n", strlen(s));
	printf("字符串:%s\n", s);
	return 0;
}

/输出结果为:

字符总数:4

字符串:h8

输出为' \x1 '、' h '、' \01 '、' 8 ' 各被解释为一个字符,共4个字符;

十六进制的数字范围为 0~9,a~f ;

八进制的数字范围为 0~7 ;

' h ' 和 ' 8 ' 超过了各自进制的数字范围;

再比如说:

复制代码
#include <stdio.h>
#include <string.h>
int main()
{
	char s[] = "\1007";
	printf("字符总数:%d\n", strlen(s));
	printf("字符串:%s\n", s);
	return 0;
}

//输出结果:

字符总数:2

字符串:@7

输出的字符串是@7,因为\100所对应的十进制为64,在ASC码值中对应字符@。

4.3. 注释

  1. 代码中有不需要的代码可以直接删除,也可以注释掉

  2. 代码中有些代码比较难懂,可以加一下注释文字

注释有两种风格:

C语言风格的注释 /*xxxxxx*/

缺陷:不能嵌套注释

C++风格的注释 //xxxxxxxx

可以注释一行也可以注释多行。

相关推荐
Scott9999HH8 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
码智社9 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海9 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖10 小时前
JDK 26 新特性详解
java·开发语言
马优晨11 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
人邮异步社区12 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大13 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai13 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
এ慕ོ冬℘゜13 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript
执明wa13 小时前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio