类型说明符 | 数的范围 | 字节数 |
int | -231~(231-1) | 4 |
unsigned int | 0~65535即0~(216-1) | 4 |
short int | -32768~32767 即-215~(215-1) | 2 |
unsigned short int | 0~65535即0~(216-1) | 2 |
long int | -2147483648~2147483648即231~(231-1) | 4 |
unsigned long int | 0~4294967295即0~(232-1) | 4 |
char | -128~127即27~(27-1) | 1 |
unsigned char | 0~255即0~(28-1) | 1 |
2. auto,register,extern,static使用有什么区别
auto变量:是函数中的局部变量,动态地分配存储空间,数据存储在动态存储区中,在调用该函数时系统会给他们分配存储空间,在函数调用结束时就自动释放这些存储空间
register变量:为了提高效率,C语言允许将局部变量的值放在CPU中的寄存器中,只有局部自动变量和形式参数可以作为寄存器变量
extern变量:外部变量是在函数的外部定义的,它的作用域从变量定义处开始,到本程序文件的结尾,如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到文件终
static变量:静态局部变量属于静态存储类别,在静态存储区内分配存储单元,在程序整个运行期间都不释放
3. 数据类型间可以进行强制转换原因
变量的值是变量所对应的内存区域内存放的二进制序列,变量的值不会因为变量的类型发生改变而改变,当变量转换为对应的类型时,内存区域内的二进制序列以该类型的形式翻译出来。由此可见,变量在内存中存放和它的值没有关系,而是和他的类型相关的。
4. 声明和定义的区别
定义就是(编辑器)创建一个对象,为这个对象分配一块内存并给它取上一个名字,这个名字我们经常所说的变量名或对象名。一个变量或对象在一定的区域内(如函数内、全局等)只能被定义一次。
声明一是告诉编译器,这个名字已经匹配到相应的一块内存上了,声明可以出现多次。二是告诉编译器,这个变量名或对象名已经被预定,别的地方再也不能用它来作为变量名或对象名。
5.使用extern时应该注意什么
(1)多个源文件 共享变量和函数时,,由于多个C源文件的编译是独立的,所以编译器无法判断多个源文件共享的变量的类型是否一致,等到链接的时候,多个源文件编译后的.o文件连接成一个目标文件,如果有一个以上源文件对同一个变量进行了初始化,则报错,至少GCC是这样。
(2)在写程序时,如果使用extern函数,一定要注意外部函数的参数类型,参数个数和返回值类型,最好保持一致,要不然会出现意想不到的问题
6. 宏定义与const常量定义之间有什么区别
define是宏定义,程序在预处理阶段将用define定义的内容进行了替换,因此程序运行时,常量表中没有用define定义的常量,系统不为它分配内存;const定义的常量,在程序运行时在常量表中,系统为它分配内存。
define定义的常量,预处理时直接进行了替换,所以编译时不能进行数据类型检验;const定义的常量,在编译时进行严格的类型检验,可以避免出错。
define 定义表达式时要注意“边缘效应”。
7. 枚举的使用方法
例如: enum enum_type_name
{
ENUM_CONST_1,
ENUM_CONST_2,
......
ENUM_CONST_n
}enum_variable_name;
注意:enum_type_name是自定义的一种数据类型名,而enum_variable_name为enum_type_name类型的一个变量,也就是我们常说的枚举变量。实际上enum_type_name类型是对一个变量取值范围的限定,而花括号内是它的取值范围。
8.typedef的使用方法
typedef为C语言的关键字,其作用是为一种数据类型定义一个新名字。在编程中使用typedef目的一般有两个:一个是给变量起个易记且意义明确的的新名字,另一个是简化一些比较复杂的类型声明。
9.联合和结构的区别
在结构体中,各成员有各自的内存空间,一个结构变量的总长度是各成员长度之和;而在联合中,各成员共享一段内存空间,一个联合变量的长度等于各成员中最长的长度。
10.局部变量和外部变量同名时的使用方式
如果同一个源文件中,局部变量和外部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”,即它不起作用。