变量之概览

来源:互联网 发布:有文化真可怕知乎 编辑:程序博客网 时间:2024/06/08 06:38

变量

变量在我看来就是某一地址上存储的可以变化的数值

常量在我看来就是某一地址上存储的不可变化的数值(之所以提常量,是因为很多人分不清常量和变量)


变量的分类

变量根据数据类型分类

  • 整型变量

    /*定义一个常量*/int i;//定义一个整型变量.如果该语句在全局位置,i为全局变量,默认初始化为0;如果该语句在局部位置,i为局部变量,默认初始化为一个随机的数,至于为什么,参考c文件解析int i1 = 9;//定义初始化一个整型变量
  • 浮点型变量

    float f;//定义一个单精度浮点型变量.如果该语句在全局位置,f为全局变量,默认初始化为0.000000;如果该语句在局部位置,f为局部变量,默认初始化为一个随机的数,大概为-0.0000015,至于为什么,参考c文件解析float f1 = 2.0;//定义初始化一个整型变量,也可以初始化为整型常量,然后类型自动转换dobule d;dobule d1 = 3.0;
  • 字符型变量

    char c;//定义一个字符型变量.如果该语句在全局位置,c为全局变量,默认初始化为0,注意不是字符'0';如果该语句在局部位置,c为局部变量,默认初始化为-73,不知道为什么.char c1 = 'a';//定义初始化一个整型变量
  • 指针型变量

    char * p;//定义一个char * 型指针.该语句会定义一个野指针,就是运行前不知道指向是哪里,运行后是确定的,我们可以通过打印语句打印出来.这样的指针指向的内容不能被直接引用,直接引用指针所指向的内容的话会出现段错误.所以千万千万千万不要这么定义.如果你还不确定指向为哪里,可以写空指针char * p = "hello";//定义初始化一个char * 型指针变量,指针p存储字符串"hello"的首地址char * p = NULL;//定义初始化一个char * 型指针变量,指针p存储的地址为0x00000000;直接引用这个指针所指向的内容仍然会出现段错误.int i = 10;int * p1 = &i;//定义初始化一个int * 型指针变量,指针p存储变量i的地址
  • 枚举型变量

    /*方法1,首先,宏声明一个枚举型数据类型,在定义变量*/enum hello{//enum hello为枚举类型名i,//枚举成员是一个int型常量,已经被初始化b};//宏声明一个枚举类型,并不分配内存.enum hello nihao;//定义一个int型变量nihao,分配内存.注意是int型变量./*方法2,宏声明和定义变量放在一起,但是也是按照先宏声明后定义变量的顺序做的*/enum hello{int i;char b;} nihao;
  • void型变量

    void * p; //一般不这么定义,一般定义的时候直接初始化,如第三行int i = 10;void * p1 = (void * )&i; //强制类型转换
  • 数组变量

    char c[10];//定义一个数组,大小为10个字节.元素为char型变量.如果该语句在全局位置,为全局变量,所有变量按全局默认初始化方法初始化;如果该语句在局部位置,c为局部变量,每个变量按局部默认初始化方法初始化,至于为什么,参考c文件解析char c1[10] = "hello";//定义初始化一个数组变量
  • 结构体变量

    /*方法1,首先,宏声明一个结构体数据类型,在定义变量*/struct hello{//struct hello为结构体类型名int i;//结构体成员char b;};//声明一个结构体类型,并不分配内存.struct hello nihao;//定义一个结构体变量.如果该语句在全局位置,nihao为全局变量,所有变量按默认初始化方法初始化;如果该语句在局部位置,nihao为局部变量,每个变量按局部默认初始化方法初始化,至于为什么,参考c文件解析/*方法2,宏声明和定义变量放在一起,但是也是按照先宏声明后定义变量的顺序做的*/struct hello{int i;char b;} nihao;
    • 共用体变量
    /*方法1,首先,宏声明一个结构体数据类型,在定义变量*/union hello{//union hello为共用体类型名int i;//共用体成员char b;};//声明一个共用体类型,并不分配内存.union hello nihao;//定义一个结构体变量.如果该语句在全局位置,nihao为全局变量,所有变量按默认初始化方法初始化;如果该语句在局部位置,nihao为局部变量,每个变量按局部默认初始化方法初始化,至于为什么,参考c文件解析/*方法2,宏声明和定义变量放在一起,但是也是按照先宏声明后定义变量的顺序做的*/union hello{int i;char b;} union;

注意

我们关注一个变量的时候会关注以下几点

  1. 存储空间
    • 参考”程序加载后的内存空间分布”与”各数据类型的存储字节数”
  2. 变量的取值范围
    • 这里涉及一个溢出的问题
  3. 变量的定义及初始化
/*只定义一个整型变量*/int a;//该变量在后续语句可以进行赋值操作,例如 a = 10; 这个语句不是初始化语句,而是赋值语句./*定义一个整型变量并初始化*/int a = 10;

作者声明

  • 这篇博客中的变量都是在32位机下的变量.64位机的变量与32位机的变量区别参考”各数据类型的存储字节数”

0 0
原创粉丝点击