1、数据类型 数的范围 字节数
int -2^31~(2^31 -1) 4
unsigned int 0~(2^16 -1) 4
short int -2^15~(2^15 -1) 2
unsigned short int 0~(2^16 -1) 2
long int -2^31~(2^31 -1) 4
unsigned long 0~(2^32 -1) 4
char -2^7~(2^7 -1) 1
unsigned char 0~(2^8 -1) 1
2、void fun()
{
static int a = 1; a++;
printf( "%d\n",a );
}
int main(void)
{
fun();
fun();
return 0;
}
执行结果为 2 3
在用static修饰局部变量后,该变量只在初次运行时进行初始化工作,且只进行一次,第二次调用fun()函数时,a的值为2
并且没有进行初始化赋值,直接进行自增运算,所以得到结果为3
3、typedef char * p_str1;
#define p_str2 char *;
p_str1 s1, s2;
p_str2 s3, s4;
上述变量的定义中,s1、s2、s3都被定义为char*,而s4则定义成了char
原因在于,#define只是简单的字符串替换而typedef则是为一个类型起新名字
4、枚举和#define宏的区别
#define 宏常量实在预编译阶段进行简单替换,枚举常量则是在编译的时候确定其值
一般在编译器里,可以调试枚举常量,但是不能调试宏常量
枚举可以一次定义大量相关的常量,而#define 宏一次只能定义一个
5、定义和声明的区别
定义就是创建一个对象,为这个对象分配一块内存并给它取上一个名字。一个变量或对象在一定的区域内只能
被定义一次。
声明是告诉编译器,这个名字已经匹配到一跨爱内存上了,声明可以多次出现
6、const修辞构造类型和指针及其参合体
将类型去掉,看const修辞谁,谁的值就是不能修改的
如const int a[5] = {1,2,3,4,5}; 去掉int,变成const a[5],那么a数组里的值就不变了
7、什么是变量
其值在其作用域内可以改变的量成为变量
变量在使用前必须定义
变量在内存中存放和它的值没有关系,而是和它的类型有关的
8、局部变量和全局变量的区别
局部变量是在函数内作定义说明的,其作用域极限与函数内,离开该函数后再使用这种变量是非法的
全局变量是在函数外部定义的变量,它不属于哪一个函数,属于一个源程序文件,其作用域是整个源程序
9、如何用typedef简化复杂的变量声明
在传统的变量声明表达式里用类型名代替变量名,然后把关键字typedef加在该语句开头
10、联合体和结构体的区别
在结构中各成员有各自的内存空间,一个结构变量的总长度是各成员长度之和
在联合中,各成员共享一段内存空间,一个联合变量的长度等于各成员中最长的长度(同样遵循对齐)