c语言中的而变量与常量
1 c语言中的内存的分配
定义变量意味着要开辟空间。
c语言的内存分配图
2.常量
c语言中对常量的定义:不能改变的量叫常量。
2.1常量的分类
整型常量:10 100 各种进制数
字符常量:‘a’
长整型常量:78L
短整型常量
无符号整型常量:78U
浮点型常量:1.2 2.3
字符串常量:例:“hello world”双引号括起来的
字符串常量:“hello world”是多少个字节?
为什么验证出来是12个字节呢?
注意:字符串常量都是‘\0’字符结尾的,因为’\0’是字符串的结束符号。
‘\0’的ASCII码值是多少: 0。
在代码中如何表示常量呢?宏来表示。
本质:就是在预处理的时候把宏直接替换成对应的数据。
宏定义的格式:
#define 名字 数值
宏函数的格式
#define 函数名 函数表达式
3.变量
变量在c语言中的定义:能够被改变的量。
3.1变量的分类
3.1.1 局部变量
局部变量:定义在函数体(任意函数体)内部的变量。
3.1.2 全局变量
全局变量:定义在函数体外的变量。
3.2定义变量
存储类型数据类型变量名;
存储类型:决定了开辟的空间在内存分区中的哪个区。
数据类型:决定了要开辟内存空间的大小。
变量名:开辟的内存空间的名字。
3.3变量的存储类型
存储类型:auto、extern、static、register
auto:修饰的变量存储在栈区,只能修饰局部变量
extern:修饰的变量存储在静态区(.bss和.data统称为静态区),只能修饰全局变量
static:修饰的变量存储在静态区,局部变量和全局变量都可以修饰
register:修饰的变量存储在寄存器中,只能修饰局部变量
总结:
1、除了static和register修饰的局部变量,其他都存储在栈区
2、全局变量存储在静态区
3、静态变量存储在静态区
3.4变量的定义与初始化
初始化:在定义变量时对变量赋值
(1)int a = 10;//初始化
(2)int a;
a = 10;//赋值
1、全局变量没有初始化其值默认为0
2、局部变量没有初始化其值为随机值
auto:修饰局部变量,存储在栈区
register:修饰局部变量,存储在寄存器中。建议将变量存储在寄存器中,可以提高程序的运行速度,由于寄存器的数目比较少,最终是否存储在寄存器中,取决于编译器,如果没有寄存器,就存在栈区
extern:修饰全局变量,存储在静态区
注意:程序可以由多个.c文件组成,但是一个程序只能有且仅有一个main函数
main.c gcc main.c->a.out(程序)
作用:声明作用,告诉编译器,这个全局变量已经在其他文件定义过了。
static:修饰的变量存储在静态区,既可以修饰局部变量又可以修饰全局变量。
1、static修饰局部变量,延长了局部变量的生命周期,如果局部变量没有初始化,其值为0,如果初始化,只被初始化一次。
2、static修饰全局变量/函数,只能在本文件内使用(限制了全局变量的作用域)。
3.5变量的生命周期
局部变量的生命周期:进入局部范围生命开始,出局部范围生命结束
全局变量的生命周期:程序的生命周期。
3.6变量的作用域
1、全局变量作用域:整个工程内都可以使用。
但是需要声明。
2、局部变量作用域:在它自己的作用区域里面才可以使用,否则报错。
生命周期。