一、关键字(32个)
只说明部分
1、auto
自动声明变量,缺省时编译器默认是auto。
2、register
请求编译器尽可能的将变量存在CPU的内部寄存器中。通过这种方式可以尽可能的提高效率。
要注意的是,内部寄存器有限,不能全部放入寄存器中,因此只是尽可能的存放CPU的内部寄存器中
3、static
修饰静态变量(全局变量,局部变量)———> 静态变量存放在内存的数据区
(1)修饰局部变量:用于函数结束的时候,这个变量的值也不会被销毁,下次调用还可以用这个值,因此静态局部变量只定义一次。很好理解问什么,因为静态变量存放在内存数据区不是栈,因此每次出栈后数据还是存在。
下面为测试代码:
#include <stdio.h>
int j; //定义全局变量j
int test1() //测试静态局部变量函数
{
int i = 0;
//static int i = 0; //定义静态变量i
i++; //将静态变量i自加一
return i;
}
int test2()
{
j = 0; //每次调用test2都会给j赋值
j++;
return j;
}
int main()
{
int k,i,j; //定义循环变量和返回值记录
for(k = 0; k < 10;k++) //调用test函数10次
{
j = test2();
i = test1(); //将test函数每一次返回的值给i保存
}
printf("%d\n",i); //打印带static i的值结果为10,不带static i的值结果为1
printf("%d\n",j); //打印j的值结果为1
return 0;
}
(2)修饰全局变量:令变量只能在此文件中使用,其他文件就算用extern声明也无法使用,这样别人的代码加入的时候就不会有全局变量重名的问题了。
3、加入一张数据类型的图
4、变量的部分规则
1、多个词组成时,每个单词的首字母大写其他小写
2、函数名禁止用于其他之处,例如定义
3、定义变量的同时千万不要忘记初始化
4、不同类型之间的运算,有低精度向高精度扩展
5、sizeof(千万记住这是个关键字,不是函数)
1、怎么记住他是关键字呢
siezof用于计算变量所占空间大小的时候可以省略括号(最好不要省略),而函数是不能省略括号的。注意计算类型大小的时候不能省略括号。
2、关于sizeof计算指针
#include <stdio.h>
int main()
{
int *p = NULL;
printf("%ld\n",sizeof p); //64位系统下是8,测得是指针的长度
printf("%ld\n",sizeof *p); //4,测是是int类型的长度
int a[100];
printf("%ld\n",sizeof a); //400,测是是数组的长度
printf("%ld\n",sizeof a[100]); //4,测是是数组类型的长度
printf("%ld\n",sizeof &a); //64位系统下是8,测是是指向数组首地址的指针长度
printf("%ld\n",sizeof &a[100]); //64位系统下是8,测试是指向a[100]的指针的长度
printf("%ld\n",sizeof(int)*p);
int b[100];
void fun(int b)
{
printf("%ld\n",sizeof b);
}
return 0;
}
6、关于unsigned 和signed
1、注意区分unsigned char 和 char
unsigned char 与 signed char 是用来声明数值的占1个字节
char 是用来声明字符的
2、范围问题
unsigned char范围是0~255;
signed char范围是 -128~127。
下面例子就能说明unsigned chaar 和signed char范围的问题
#include <stdio.h>
int main()
{
signed char a[1000];
int i;
for(i = 0;i < 1000;i++) //由于a是signed char范围是-128~127,有效的值只有255个
{
a[i] = -1-i;
}
printf("%d\n",strlen(a)); //结果为255
return 0;
}
#include <stdio.h>
int main()
{
int i = -20;
unsigned int j = 10;
// printf("%u\n",i+j); //很大的数
printf("%d\n",i+j); //-10
unsigned b = 0;
printf("%u\n",b); // =0
for(b = 9;b >= 0;b--) //无符号数的0在减后会变成一个很大的数,在进行循环,变成了一个死循环
{
printf("%u\n",b);
}
return 0;
}
7、float
没什么好说的大家都认识,只有注意它与0不能之间比较,要看精度,有时候可能无意义。
8、const(很重要的一个关键字)
它用于修饰只读变量。
1、注意在修饰指针的时候如何判断
(1)去掉类型
(2)看与const最接近的是*还是pa;
例如const int pa,修饰的是pa,说明pa指向的内容不能改变,但pa能改变
而 int const pa,修饰的是pa,说明pa指向的内容能改变,但pa不能改变
9、extern
用于变量声明,变量声明没有空间,不能进行赋值。