- c语言是什么?
- Hello world
- 定义与声明
- 变量的作用域
- 变量的生命周期
- 常量
- 字符串
C语言是一门面向过程的计算机编程语言,与C++、Java等面向对象编程语言有所不同。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
C语言描述问题比汇编语言迅速,工作量小、可读性好,易于调试、修改和移植,而代码质量与汇编语言相当。C语言一般只比汇编语言代码生成的目标程序效率低10%~20%。因此,C语言可以编写系统软件。
二十世纪八十年代,美国国家标准局为了避免各开发厂商用的C语言语法产生差异,给C语言制定了一套完整的美国国家标准语法,称为ANSI C。作为C语言最初的标准。 2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。
C语言编译器普遍存在于各种不同的操作系统中,例如Microsoft Windows, Mac OS X, Linux, Unix等。C语言的设计影响了众多后来的编程语言,例如C++、Objective-C、Java、C#。
Hello world
#include//包含头文件 int main() //主函数 { printf("Hello worldn"); //头文件里面的格式化输出函数 return 0; //主函数的返回值 } //出了花括号后代表程序结束
c语言的基本组成结构
- "#include
"预处理命令,预处理阶段将头文件展开并且拷贝到代码里面。 - “int main()”主函数,程序的入口,每个工程(程序)只能有一个主函数!
- "格式化输出函数(printf)"头文件里面的标准输出函数。
详细的函数原型请移步cplusplus.com
定义与声明
数据类型
char 字符数据类型 short 短整型 int 整形 long 长整型 long long 更长的整形 float 单精度浮点数 double 双精度浮点数
每种类型的大小是多少?(sizeof关键字求变量在内存中开辟空间的字节个数)
| c语言类型 | 32位系统(字节) | 64位系统(字节) |
|---|---|---|
| char | 1 | 1 |
| short | 2 | 2 |
| int | 4 | 4 |
| long int | 4 | 4 |
| long long int | 8 | 8 |
| float | 4 | 4 |
| double | 8 | 8 |
| 类型*(指针) | 4 | 8 |
注:c语言中没有字符串类型,但是有字符串!
什么是变量?
在内存中开辟特定大小(本身的类型决定大小)的空间,用来保存数据。
定义变量
#includeint main() { int a = 1; char b = 'b'; double b = 1.0; return 0; 总结: 类型 变量名(标识符) = 默认值; }
变量的分类
#includeint a = 0; //定义全局整形变量 int main() { int b = 10; //定义局部整形变量 //下面重复定义一个a会不会出问题? int a = 10; //定义局部整形变量 printf("%dn",n); //%d是十进制(整形)输出 return 0; }
运行结果如下:
总结:
1.主函数外定义的变量是全局变量
2.主函数里定义的变量是局部变量
3.当局部变量和全局变量同名的时候,局部变量优先使用!(就近原则)
为什么要定义变量
1.计算机是为了解决人计算能力不足的问题而诞生的 => 计算就需要数据
CPU进行计算,不是所有的数据都要立马被计算的。
例如:我们吃饭,不是所有的饭菜都要立马被你吃掉。饭要一口一口慢慢的吃,那么你还没有吃到的饭菜,就需要暂时放到盘子里!
这里的盘子,就如同变量,饭菜如同变量里面的数据。
数据需要暂时被保存起来,等待后续处理。
变量定义的本质
1.程序运行,需要加载到内存中
2.程序计算,需要使用变量
3.定义变量的本质:在内存中开辟一块空间,用来保存数据。
变量声明的本质
举一个例子:
你宿舍有八个人,你跟其他七个人都同时喜欢一个女生。
有一天你鼓起勇气去表白,成功了就是定义的意思,定义就是只能定义一次,你只能有一个女朋友。
之后,你回到宿舍跟其他人一个个的私下说你们喜欢的人已经是我女朋友了,你们不要跟她走的太近。
这就是声明的意思,可以声明很多次!
声明一般指的是函数声明。
变量的作用域
作用域概念:指的是定义的变量在代码内被正常使用的区域。
#includeint main() { int a = 10; if(a == 10) { int b = 10; printf("局部变量:a=%d,b=%dn",a,b); //b只能在if语句代码块内使用 } //出了代码块局部变量会被释放(置为无效) printf("a=%d,b=%dn",a,b); //报错!b未定义,出了代码块无法使用 return 0; }
总结:局部变量只能在本代码块内有效
#includeint a = 10; //全局变量 void test() { printf("%dn",a); //任何代码块都能被访问 } int main() { test(); a = 20; printf("%dn",a); //在任何代码块被修改也可以使用 return 0; }
#includeint a = 100; //全局变量 int main() { int a = 10; //局部变量,与全局变量同名 printf("%dn",a); //输出的是局部变量,也就是局部和全部同名的时候,优先局部 return 0; }
全局变量:
1.整个程序运行期间,都有效,主函数结束才会被释放
2.全局变量和局部变量同名时,优先使用局部变量(就近原则)
变量的生命周期
生命周期概念:指的是该变量从定义到被释放的时间范围,所谓的释放,指的是曾经开辟的空间”被释放“
局部变量:进入代码块,形成局部变量,退出代码块,局部变量被"释放"
全局变量:在整个程序运行期间生命周期都有效,退出程序全局变量被"释放"
作用域vs生命周期
作用域是在代码块里定义的变量,出了代码块后不可以被使用。
而生命周期是进入代码块到退出代码块的时间概念。
二者还是有些相似性的,大家别搞混了哦!
常量
C语言中的常量和变量的定义的形式有所差异。
C语言中的常量分为以下以下几种:
| 关键字 | 说明 |
|---|---|
| 无 | 字面常量 |
| const | const修饰的常量和变量 |
| enum | 枚举类型 |
#include//举例 enum Colour { RED, BLUE, BREAK }; //括号中的RED,BLUE,BREAK是枚举常量 int main() { 3.14;//字面常量 1000;//字面常量 const float pai = 3.14f; //const修饰的常量 pai = 5.14;//ok? #define MAX 100 //#define的标识符常量 return 0 }
字符串
字符串概念: 字符串是由双引号(" ")引起来的一串字符称为字符串的字面值。
注: 字符串的结束标志是 这个转义字符,在计算字符串长度的时候 是结束标志,不算作字符串的内容。
//举例 #include//下面代码,打印结果是什么?为什么?(突出' '的重要性) #include int main() { char arr1[] = "hello world"; //定义字符类型数组,数组里面存放的是"字符串" char arr2[] = {'h', 'e', 'l', 'l', 'o'}; char arr3[] = {'h', 'e', 'l', 'l', 'o',' '}; printf("%sn", arr1); printf("%sn", arr2); printf("%sn", arr3); return 0; }
总结:
1.字符串的结束标志是 转义字符
2.如果在数组中定义的字符类型元素没有‘ ’,则打印时会一直找到‘ ’为止!
3.数组中定义的元素是字符类型变量,结束标志是’ ’
字符串的长度
//举例 #include#include int main() { char arr[] = "hello world"; //定义字符类型数组,数组里面存放的是字符串 printf("%dn", strlen(arr)); //运行结果是11,因为求的是字符串"长度",长度不包含结束符 printf("%dn",sizeof(arr)); //运行的结果是12,求的是字符数组在内存中开辟空间的大小,包含结束符 return 0; }
总结:
(1)求字符串长度不包含
(2)求字符串在内存中开辟的空间大小时包含



