您的位置:首页 > 编程语言 > C语言/C++

20170128C语言提升01_数据本质和static和生命周期和作用域

2017-01-28 14:23 357 查看


数据类型:

    数据类型其实并不是数据类型,他其实是有一个坑。他可以理解为固定内存大小的一种别名。它是一种模版,它的作用就是规定大小和定位,并不是char类型不可以装数值,不是int不可以表示字符,数据类型的初衷是定义了一种模版,最重要的就是其大小,可以用运算符sizeof()来计算。

变量名的本质:

    就是内存地址的别名,可以使用别名来访问内存。

#define ULONG unsigned long
typedef unsigned int UINT;
typedef char* string;//可以让我们更好的理解程序,是程序的表现形式多样化。本质是没有发生改变的。
typedef enum SHOW_STYLE
{
SHOW_STYLE1,
SHOW_STYLE2
}STYLE;//后面使用这个枚举可以直接使用STYLE来定义。


变量属性:

auto:编译器默认局部变量的分配方式就是auto类型,定义前面默认加了auto的,他表示在栈里面分配空间,他与C++11里面的类型自动推导不是一个。全局变量是存储在全局变量区里面,不应该存储在栈里面,只有局部变量可以加这个。

static:存储在程序静态区里面,程序静态区的生命周期和全局变量一样,但是作用域不一样。他只会被初始化一次。在其他文件定义的全局变量加上static的话,就会导致只能在原来的文件里面访问到那个变量,不可以使用extern定义然后再其他文件里面来访问。static会讲全局变量的作用域限定在当前文件里面。static修饰函数的话也是将函数的作用域限定在本文件里面。可以使我们的程序更加的模块化。静态的局部变量是可以被返回出去的,但是要注意,如果返回出去的数据是char*类型,就不建议这样返回,不应该返回可变的,不符合语义。他的作用应该是控制作用域。

    作用:1:改变存储位置,从栈改变到静态区,生命周期改变了。2:修饰全局变量
c043
以及函数,使他们降级,作用域限定在本文件。

register:是变量存储在寄存器,这样访问速度会非常快。这个操作不一定成功,他会由编译器来决定,和C++的inline有点类似。加上register后,不可以对这个变量进行取地址操作。全局变量也不可以使用这个来修饰。

作用域,生命周期:

    作用域是语法层次上来说得,C语言会以一个大括号决定作用域,不一定在if或者for里面,直接一个空括号里面申请的变量的作用域也仅仅在括号内。但生命周期是整个函数内。生命周期是地址存在的时间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编程 c语言