带你玩遍c语言(1)关键字

来源:互联网 发布:深圳冰川网络 编辑:程序博客网 时间:2024/05/21 10:37

c语言有多少关键字

你知道C语言有多少关键字吗?你能一一说出它们的名字与作用吗?
肯定有许多人答不上来,那么让我告诉你C语言一共32个关键字,具体如下:

关键字 意义 auto 声明自动变量,缺省时编译器一般默认auto int 声明整型变量 double 声明双精度变量 long 声明长整型变量 char 声明字符型变量 float 声明浮点型变量 short 声明短整型变量 signed 声明有符号类型变量 unsigned 声明无符号类型变量 struct 声明结构体变量 union 声明联合数据类型 enum 声明枚举类型 static 声明静态变量 switch 用于开关语句 case 开关语句分支 default 开关语句中的“其他”分支 break 跳出本次循环 register 声明寄存器变量 const 声明只读变量 volatile 说明变量在程序中执行可被隐含地改变 typedef 用以给数据类型取别名,当然也有别的作用 extern 声明变量是在其他文件中声明(也可以看作是引用变量) return 子程序返回语句(可带参数也可不带参数) void 声明函数无返回值或者无参数,声明空类型指针 continue 结束当前循环,进入下一轮循环 do 循环语句的循环体 while 循环语句的循环条件 if 条件语句 else 条件语句否定分支 for 一种循环语句 goto 无条件跳转语句 sizeof 计算对象所占内存空间大小

定义与声明

定义:编译器创建一个对象,为该对象分配一块内存并为之取一个名字
声明:1.告诉编译器这个名字已经分配上内存了2.告诉编译器,这个名字已经被预定了,不得重名。

int i;//定义
extern int i;//声明

register

这个关键字就是让变量存在寄存器中
注意点:

register修饰的变量必须是CPU所能接受的类型,就是该变量必须是单个值且小于等于整型长度(想想汇编就明白了)

由于该变量不存在内存,所以不能用&取地址

static

修饰变量

变量又分局部变量与全局变量
1.静态全局变量:
作用域仅限于变量被定义的文件中,其他文件即使用extern声明也无法使用
2.静态局部变量:
在函数体中定义,只能在该函数中使用,当让这个静态变量即使函数结束也不会被销毁

修饰函数

静态函数:对函数的作用域仅限与本文件(内部函数)
好处:不同的人编译不同的函数时,不用担心自己定义的函数是否与其他文件中的函数同名

sizeof

int i;
sizeif i;
此时得到的值是多少?4,即使sizeof不叫括号也能预算,所以它一定不是函数。

int *p = NULL;
sizeof(p)//地址4
sizeof(*p)//数4
int a[100]
sizeof(a) //数组块 400
sizeof(a[100]) //值,此值随机 4
sizeof(&a) //4

signed\unsigned

int main(){  signed char a[1000]; int i;  for(i=0;i<1000;i++)   {          a[i] = -1-i;   }   printf("%d",strlen(a));   return 0;}

得到的为255
为什么,补码问题,后面会详细解释

void

其作用:对函数返回的限定,对函数参数的限定
1.如果函数没有返回值,那么应将其声明为void类型
2.如果函数无参数,那么应声明其参数为void
3.在使用void*指针的时候,一定要用限定类型再操作
4.void声明的是一种抽象

return

return不可返回“栈内存”的指针,因为该内存在函数体结束后会被销毁

const

编译器通常不为普通const只读变量分配存储空间,而是将他们保存在符号表中
而宏定义是立即数,从编译的角度来看宏定义有若干份备份,而const只有一份,且宏定义是没有类型的,而const有,那么类型出错也会报error
那么我们最常碰到是咋么记住const修饰的指针或者指针变量,记住“进水楼台先得月”,去掉类型名,看const修饰谁

volatile

告诉编译器不要优化,继续去取内存中的值,

const和volatile放在一起的意义在于:
(1)本程序段中不能对a作修改,任何修改都是非法的,或者至少是粗心,编译器应该报错,防止这种粗心;

(2)另一个程序段则完全有可能修改,因此编译器最好不要做太激进的优化。

“const”含义是“请做为常量使用”,而并非“放心吧,那肯定是个常量”。
“volatile”的含义是“请不要做没谱的优化,这个值可能变掉的”,而并非“你可以修改这个值”。
因此,它们本来就不是矛盾的。
const volatile int = 10没有任何问题。

extern

表明变量或者函数的定义在别的文件中

struct

一个空的结构体sizeof一般来讲为1,当然可能也为0

柔性数组

struct st_type{  int i;    int a[];}type_a;

union

在union中所有成员公用一个空间,这就涉及到了大小端模式
在此不实际拓展开来

enum

枚举常量,当然常量也是可以被赋值得

  1. 宏常量在预编译阶段只是简单替换;枚举常量测试在编译的时候才确定其值
  2. 一般在调试器里面,可以调试枚举常量,但不能调试宏常量
  3. 枚举可以一次定义大量相关的常量,宏常量只能定义一次

typedef

为已经存在的数据类型取个别名
typedef取的别名不支持类型拓展
typedef int int32
unsigned int32 j=32会报错

原创粉丝点击