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(VS 2019)、Turbo C等。
#include
//标准的主函数写法
int main()
{
printf("hello world\n");
return 0;
}
//解释:
//main函数是程序的入口
//一个工程中main函数有且仅有一个
//printf是一个库函数,专门用来打印数据
//std - 标准
//i - input
//o - output
//古老的写法
//void main()
//{
//
//}
char //字符数据类型
short //短整型
int //整形
long //长整型
long long //更长的整形
float //单精度浮点数
double //双精度浮点数
//C语言有没有字符串类型?
为什么出现这么的类型?
每种类型的大小是多少?
int main()
{
//printf("%d\n", sizeof(char)); //1
//printf("%d\n", sizeof(short)); //2
//printf("%d\n", sizeof(int)); //4
//printf("%d\n", sizeof(long)); //4
//printf("%d\n", sizeof(long long)); //8
//printf("%d\n", sizeof(float)); //4
//printf("%d\n", sizeof(double)); //8
//printf("%d\n", sizeof(long double)); //8
//有的编译器不可使用%d,使用的是%zu
printf("%zu\n", sizeof(char)); //1
printf("%zu\n", sizeof(short)); //2
printf("%zu\n", sizeof(int)); //4
printf("%zu\n", sizeof(long)); //4
printf("%zu\n", sizeof(long long)); //8
printf("%zu\n", sizeof(float)); //4
printf("%zu\n", sizeof(double)); //8
printf("%zu\n", sizeof(long double)); //8
return 0;
}
计算机存储单位一般用 bit, Byte, KB, MB, GB, TB, PB, EB, ZB, BB来表示
计算机存储信息的最小单位: bit (比特)(Binary Digits):存放一位二进制数,即 0 或 1,最小的存储单位。
计算机存储容量基本单位是字节 byte,8个二进制位(bit)为一个字节(B),即一个字节占8位。
换算
1 B(Byte 字节)=8 bit,
1 KB (Kilobyte 千字节)=1024 B,
1 MB (Megabyte 兆字节 简称“兆”)=1024 KB,
1 GB (Gigabyte 吉字节 又称“千兆”)=1024 MB,
1 TB (Trillion byte 万亿字节 太字节)=1024 GB,其中1024=2^10 ( 2 的10次方),
1 PB(Peta byte 千万亿字节 拍字节)=1024 TB,
1 EB(Exa byte 百亿亿字节 艾字节)=1024 PB,
1 ZB (Zetta byte 十万亿亿字节 泽字节)= 1024 EB,
1 YB (Yotta byte 一亿亿亿字节 尧字节)= 1024 ZB,
1 BB (Bronto byte 一千亿亿亿字节)= 1024 YB.
问:为什么计算机储存单位的进率是1024而不是1000?
答:因为目前计算机都是二进制的,让它们计算单位,只有2的整数幂时才能非常方便计算机计算,因为电脑内部的电路工作有高电平和低电平两种状态.所以就用二进制来表示信号,(控制信号和数据),以便计算机识别。而人习惯于使用10进制,所以存储器厂商们才用1000作进率。这样导致的后果就是实际容量要比标称容量少,不过这是合法的。1024是2的10次方,因为如果取大了,不接近10的整数次方,不方便人们计算;取小了,进率太低,单位要更多才能满足需求。所以取2的10次方正好。
计算实例:标称100 GB的硬盘,其实际容量为100×1000×1000×1000字节/1024×1024×1024≈93.1 GB
注意:存在这么多的类型,其实是为了更加丰富的表达生活中的各种值。
类型的使用:
int main()
{
char ch = 'w';
double price = 66.6;
int salary = 20000;
return 0;
}
生活中的有些值是不变的(比如:圆周率,性别,身份证号码,血型等等)
有些值是可变的(比如:年龄,体重,薪资)。
C语言中用常量的概念来表示不变的值;C语言中用变量来表示变的值。
int main()
{
short age = 20;
int high = 180;
float weight = 88.8f;
return 0;
}
//全局变量 - {}外部定义的变量
//局部变量 - {}内部定义的变量
int global = 2022;//全局变量
int main()
{
int local = 2018;//局部变量
//下面定义的global会不会有问题?
int global = 2020;//局部变量
printf("global = %d\n", global); //2020
return 0;
}
总结:
上面的局部变量global变量的定义其实没有什么问题的!
当局部变量和全局变量同名的时候,局部变量优先使用。
int main()
{
int num1 = 0;
int num2 = 0;
int sum = 0;
printf("输入两个操作数:>");
scanf("%d %d", &num1, &num2);
sum = num1 + num2;
printf("sum = %d\n", sum);
return 0;
}
注意:
VS 2019编译器下,scanf 使用会出现错误,会提示使用scanf_s。实际上,scanf_s这个函数是VS编译器自己提供的函数,不是标准C提供的函数,即只有VS编译器认识,其他编译器不认识,故不推荐使用scanf_s。
解决方法:
在D:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\VC\VCProjectItems路径下找到newc++file.cpp文件,在文件中添加#define _CRT_SECURE_NO_WARNINGS 1行,之后创建的源文件首行就默认有#define _CRT_SECURE_NO_WARNINGS 1。
作用域
作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。
C语言中的常量和变量的定义的形式有所差异。
C语言中的常量分为以下以下几种:
//字面常量演示
int main()
{
3.14;//字面常量
1000;//字面常量
return 0;
}
//const 修饰的常变量演示
int main()
{
//这里的a是const修饰的常变量
//a本质上是变量,但const修饰后,不能改变,有常量的属性,故为常变量
const int a = 10;
a = 20;//是不能直接修改的!
printf("%d\n", a);
return 0;
}
//#define的标识符常量演示
#define MAX 100
int main()
{
printf("max = %d\n", MAX); //100
return 0;
}
//枚举常量演示
enum Sex
{
MALE,
FEMALE,
SECRET
};
int main()
{
printf("%d\n", MALE); //0
printf("%d\n", FEMALE); //1
printf("%d\n", SECRET); //2
//注:枚举常量的默认是从0开始,依次向下递增1的
return 0;
}