C语言数据类型和const、static关键字
基本数据类型
int
- long int、long:8个字节 %ld
- short int、short:2个字节 %d %i
- unsigned int、unsigned:4个字节 %zd
- signed int、signed、int:4个字节 %d %i
float、double
- float :4个字节 %f
- double:8个字节 %f
char
1个字节 %c %d
char类型保存在内存中的是它的ASCII值 'A' --> 65
构造类型
数组
- 只能由同一种类型的数据组成
- 定义:数据类型 数组名[元素个数];
结构体
可以由不同类型的数据组成
先定义类型,再利用类型定义变量
可以定义结构体和数组变量的同时进行一次性赋值。定义完变量是不可以再进行一次性赋值的。因为数组名代表第一个数的地址,地址值是常量,不可以更改。结构体相当于多元化的数组。
指针类型
- 变量的定义 int *p;
- 间接操作变量的值
int a = 10;
p = &a;
*p = 20;
枚举类型
使用场合:当一个变量只允许有几个固定取值时,可以使用枚举类型,看起来会优雅很多。
enum DAY
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
};
const 关键字
const int a;
int const a;
const int *a;
int const *a;
int * const a;
int const * const a;
- 前两个的作用是一样:a 是一个常整型数
- 第三、四个意味着 a 是一个指向常整型数的指针(整型数是不可修改的,但指针可以)
- 第五个的意思:a 是一个指向整型数的常指针(指针指向的整型数是可以修改的,但指针是不可修改的)
- 最后一个意味着:a 是一个指向常整型数的常指针(指针指向的整型数是不可修改的,同时指针也是不可修改的)
static 关键字
static 全局变量
当一个进程的全局变量被声明为static之后,它的中文名叫静态全局变量。
静态全局变量和其他的全局变量的存储地点并没有区别,都是在.data段(已初始化)或者.bss段(未初始化)内,但是它只在定义它的源文件内有效,其他源文件无法访问它。
static 局部变量
普通的局部变量在栈空间上分配,这个局部变量所在的函数被多次调用时,每次调用这个局部变量在栈上的位置都不一定相同。局部变量也可以在堆上动态分配,但是记得使用完这个堆空间后要释放。
static 局部变量中文名叫静态局部变量。它与普通的局部变量比起来有如下几个区别:
- 位置:静态局部变量被编译器放在全局存储区.data(注意:不在.bss段内)),所以它虽然是局部的,但是在程序的整个生命周期中存在。
- 访问权限:静态局部变量只能被其作用域内的变量或函数访问。也就是说虽然它会在程序的整个生命周期中存在,由于它是static的,它不能被其他的函数和源文件访问。
- 值:静态局部变量如果没有被用户初始化,则会被编译器自动赋值为0,以后每次调用静态局部变量的时候都用上次调用后的值。这个比较好理解,每次函数调用静态局部变量的时候都修改它然后离开,下次读的时候从全局存储区读出的静态局部变量就是上次修改后的值。
static 函数
static函数的作用域是本源文件,相当于面向对象语言中对private函数。
参考
https://blog.csdn.net/keyeagle/article/details/6708077
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 风屋
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果