0.0 、32个关键字:
auto、short、int、long、char、float、double(6中基本数据类型)、signed、unsigned、struct、union、enum、static、register、const、volatile、typedef、sizeof、extern、return、void、do、while、if、else、for、goto、switch、case、default、break、continue。
注意:define、include这些带#号的都不是关键字,是预处理指令。
关键字 | 意义 |
static | 声明静态变量 |
const | 声明只读变量 |
volatile | 说明变量在程序执行中可被隐含地改变 |
sizeof | 计算对象所占内存空间大小 |
0.1、定义与声明
定义 就是(编译器)创建一个对象并为这个对象分配内存,并给它取上一个名字。 如:int i;
声明 是告诉编译器,在程序中有这么一个对象,但不给它分配内存。 如:extern int i;
声明有2重含义:
1.告诉编译器,这个变量名已匹配到一块内存上,下面代码用到的变量或对象是在别的地方定义的。声明可以出现多次;
2.告诉编译器,这个变量名已被预订了,别的地方再也不能用它来作为变量名或对象名。(比如:图书馆的占座,在说面放本书---声明这个座位已有人预订)
1.2 最快的关键字:register
对于register这个关键字定义的变量,不能进行取地址运算(&),因为对于x86架构来说,地址都是在内存中的,不是在寄存器中的,所以对寄存器进行取地址是没有意义的。并且应该注意的是给register定义的变量,应该赋一个比寄存器大小 要小的值。
注意:register只是请求寄存器变量,但是不一定申请成功。
1.3 最名不符实的关键字——static
#include <stdio.h>
static int j;
void fun1(void)
{
static int i = 0;
i++;
printf("%d", i);
}
void fun2(void)
{
j = 0;
j++;
}
int main(void)
{
int k = 0;
for(k = 0; k < 10; k++)
{
fun1();
fun2();
}
printf("%d", j);
return 0;
}
(一)经常被人误认为是函数
sizeof是关键字不是函数,下面我们利用编译器来证明它的“清白”---验身!看下面例子:
int i =0
A. sizeof ( int ) ; B.sizeof (i) ; C.sizeof int ; D.sizeof i ;
在32位系统下A、B 的值为:4 ,那么C的值呢? D的值呢?
在32为系统下,通过Visual C ++ 6.0 或任意编译器调试,D的结果为4,没有括号居然也行!而函数名后面没有括号是不行的,所以证明:sizeof 真的不是函数耶!
再看C编译器提示出错,sizeof int 表示什么?明显不正确,我们可在 int 前加unsigned 、 const等关键字,但不能加sizeof.
【记住:sizeof 在计算变量所占的空间大小时,括号可以省略,如:sizeof i;而计算类型(模子)大小时不能省略:sizeof (int)】
#include <stdio.h>
void fun(int b[100])
{
printf("sizeof(b) is %d\n",sizeof(b)); <span style="font-family: Arial, Helvetica, sans-serif;"> </span>
int main(void)
{
int *p=NULL;
int a[100];
int b[100];
printf("sizeof(p) is %d\n",sizeof(p)); 4
printf("sizeof(*p) is %d\n",sizeof(*p)); 4
printf("sizeof(a[100]) is %d\n",sizeof(a[100])); 4
printf("sizeof(a) is %d\n",sizeof(a)); 400
printf("sizeof(&a) is %d\n",sizeof(&a)); 4
printf("sizeof(&a[0] is %d\n",sizeof(&a[0])); 4
fun(b); 4
return 1;
}