C语言深度剖析笔记.doc
32个关键字简记
注:该笔记根据《C语言深度剖析》一书而成
sizeof是32个关键字之一
什么是声明?什么是定义?详见P11页
定义与声明的区别:定义创立了对象并为这个对象分配了内存,声明没有分配内存,可以先声明把位子占了〔如函数的声明〕,然后再定义
auto关键字〔P12〕:可以当其不存在,默认情况下所有变量都是auto型的
register关键字〔P12〕:请求编译器尽可能的将变量存储在cpu内部的存放器中,是尽可能不是绝对,一个cpu的存放器也就几个或者几十个,存取速度最快
register变量必须是一个单个的值,而且其长度最长为一个整型的长度。对这种变量不可以使用取址运算符来获取其地址,因为它不再内存中
static关键字〔P13〕:可以修饰变量也可以修饰函数、存储区为内存中的静态存储区、修饰函数时是为了将该函数的作用域局限于本文件内,解决同名问题
例:
#includestdio.h
#includestdlib.h
staticintj;
voidfun1(void)
{
staticinti=0;
i++;
printf(%d\t,i);
}
voidfun2(void)
{
j=0;
j++;
}
intmain()
{
intk;
for(k=0;k10;k++)
{
fun1();
fun2();
}
printf(\nj=%d\n,j);//此处的i不能输出,因为fun1〔〕函数的返回值是void型,staticinti的作用域为整个fun1〔〕函数内,超出无效
//程序完结时,i=10;j=1;
returnEXIT_SUCCESS;
}
》》》》1 2 3 4 5 6 7 8 9 10
j=1
C语言的数据类型:
根本数据类型关键字〔P14〕:short、long、int、char、float、double〔共6种〕
构造数据类型:数组、结构体struct、公用体union、枚举类型enum
指针类型
空类型void
32位系统中:
short为2个字节,int为4个字节,long为4个字节,float为4个字节、
double为8个字节,char为1个字节〔一般情况下〕
隐式类型转换:
short,char→→int→unsignedint→long→double〔主干道〕←←float
char+char是先隐式转换为int的,再进行运算
任何数据都的先跑到主干道,才能运算〔int到double为主干道,32位的问题〕
变量名的命名规那么〔P15〕:注意x与X之间,1〔数字1〕与l〔字母l〕之间,0与o之间的区别,不建议使用这些易混淆的
定义了变量的同时千万别忘了对其初始化
不同数据之间的运算要注意精度扩展问题,一般是低精度数据向高精度数据扩展
sizeof关键字〔P19〕:
例:inti=0;
Asizeof〔int〕Bsizeof〔i〕CsizeofintDsizeofi
毫无疑问,在32位系统下A、B的值为4,其实D也是4
注:函数名后面没有括号是绝对不行的,编译C时,编译器会提示出错
我们可以在int前加unsight、const等关键字但是不能加sizeof关键字
sizeof在计算变量的大小时括号可以省略但是在计算类型的大小时括号是不可以省略的
sizeof〔int〕*p是什么意思?个人认为相当于是sizeof〔〔int〕*p〕
例:
#includestdio.h
#includestdlib.h
voidfun(intb[100])
{
printf(\nsizeof(b)=%d\n,sizeof(b));
}
intmain()
{
int*p=NULL;
printf(sizeof(p)=%d\n,sizeof(p));
printf(sizeof(*p)=%d\n,sizeof(*p));
inta[100];
printf(\nsizeof(a)=%d\n,sizeof(a));//此处的大小为100,其余均为四
printf(sizeof(a[100])=%d\n,sizeof(a[100]));//a[100]存在吗??越了界还是按4累加?
printf(sizeof(a)=%d\n,sizeof(a));
printf(sizeof(a[0])=%d\n,sizeof(a[0]));
intb[100];
fun(b);
returnEXIT_SUCCESS;
}
》》》sizeof(p)=4