数据类型

提问:

1.什么是联合体?

2.变量名和变量值区别是什么?

3.数据变量有哪些?

4.局部变量和全局变量?

5.有哪些基本内置类型?

6.static是什么?

7.extern是什么?

8.const是什么?

9.typedef是什么?

10.枚举与#define的区别?


1.联合体

 1)联合体是一个结构;

  2)它的所有成员相对于基地址的偏移量都为0

 3)此结构空间要大到足够容纳最""的成员;

 4)其对齐方式要适合其中所有的成员;

2.变量名是在变量的声明的时候,该名字就和内存中一块地址绑定在一起了。可以通过变量名直接找到对应的内存区域,也可以通过地址找到其内存区域。

变量的值是变量所对应的内存区域内存放的二进制序列。变量的值不会因为变量的类型发生了改变而改变,当变量被转换为对应类型时,内存区域的二进制序列以该类型的形式翻译出来。这也是强制类型转换能够成立的原因。

该名字就和内存中一块地址绑定在一起了。可以通过变量名直接找到对应的内存区域,也可以通过地址找到其内存区域。

变量的值是变量所对应的内存区域内存放的二进制序列。变量的值不会因为变量的类型发生了改变而改变,当变量被转换为对应类型时,内存区域的二进制序列以该类型的形式翻译出来。这也是强制类型转换能够成立的原因。

3.1)整型变量    2)字符型变量    (3)浮点型变量  (4)指针型变量 变量的值可以发生改变,可以被覆盖、被写入、被赋值。每个变量必须有一个名字和它所在内存空间绑定。

代码中明的变量类型已经决定,但其所代表的空间里的数据是可以修改的。

.局部变量是内部变量,局部变量是在函数内作定义说明的,其作用域仅限于函数内,离开函数后再使用这种变量是非法的。

1)主函数中定义的变量只能在主函数中使用,不能在其他函数中使用。同时,主函数中也不能使用其他函数中定义的变量。因为主函数也是一个函数,它与其他函数是平行关系。

2)形参变量是属于被调用函数的局部变量,实参函数是属于主调函数的局部变量。

3)允许在不同的函数中使用相同的变量名,代表不同的对象,分配不同的单元,互不干扰,也不发生混淆。

4)在复合语句中也可定义变量,作用域只在复合语句范围内。

全局变量:也称外部变量,是在函数外部定义的变量,不属于哪一个函数,属于一个源文件,作用域是整个源程序。在函数中使用全局变量,一般应作全局变量说明,只有在函数内经过说明的全局变量才能使用。全局变量的说明符为extern,但在一个函数之前的全局变量,在该函数内使用可不再加以说明。

5.(1)整型  2)实型  3)构造类型  

4)指针类型  5)枚举类型   6void类型

6.static修饰变量,指该变量空间独立于函数中的auto变量或者栈变量,static变量空间在内存中的静态区内分配。

1)修饰局部变量:一般情况下,局部变量是存放在栈区的,并且局部变量的生命周期在该语句块执行结束时便结束了。但使用static进行修饰的话,该变量便存放在静态数据区,其生命周期一直持续到整个程序执行结束为止。但其作用域并没有改变,仍是一个局部变量,作用域仅限于该语句块。

2)修饰全局变量:对于一个全局变量,它既可以在本源文件中被访问,也可以在同一个工程的其他源文件中被访问(只需用extern进行声明即可)

3)修饰函数:情况与修饰全局变量一样,改变了函数的作用域。

Extern指当前变量或函数不是在本源文件内声明的,是外部变量或外部函数,在文件里试图用一个外部声明的全局变量或函数时,可在前加上extern

7.extern可修饰变量和函数,表示该变量或者函数在其他地方被定义,在此声明使用它,多个源文件共享变量和函数;多个c源文件的编译是独立的,所以编译器无法判断多个源文件共享的变量的类型是否一致;等到链接的时候,多个源文件编译后的.o文件链接成一个目标文件,如果有一个以上源文件对同一个变量进行了初始化,则报错。

8.const关键字的作用主要有以下几点:

(1)可以定义const常量,具有不可变性。

(2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。
(3)可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。
(4)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。 
(5) 为函数重载提供了一个参考。 
(6) 可以节省空间,避免不必要的内存分配。
(7) 提高了效率。 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

 

9. typedef

(1)常规变量类型定义     

(2)指针类型定义             

(3)数组类型定义           

(4)函数地址说明

(5)函数声明

(6)函数指针

 

10. 枚举与#define的区别

(1)#define 宏常量是在预编译阶段进行简单替换,枚举常量则是在编译的时候确定其值。

(2)一般在编译器里,可以调试枚举常量,但是不能调试宏常量。

(3) 枚举可以一次定义大量相关的常量,而#define 宏一次只能定义一个。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值