我记得我开始学习C语言的时候,那时候还在读高中,我们老师就把C语言的关键字,全部写在黑板上,老师说我们下面的两节课的内容就是(把它给记下来)

你还记得标准C有多少个关键字吗?

第一:关键字描述

C99 关键字为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条件语句否定分支(与if 连用)
for一种循环语句(可意会不可言传)
goto无条件跳转语句
sizeof 计算对象所占内存空间大小
注意:
细心的童鞋,会发现我上述用了很多 "声明" 两个字,我要说的是 声明和定义的区别,比搞混淆了
定义:就是编译器创建一个对象,分配一块内存空间,并给它去了个名字,这个名字和内存空间对应。
声明:就是告诉编译器,这个名字已经比配过一块内存空间了,用到的变量或者在其他的地方定义过。或者我先预定这个名字,其他地方不能再用它了。

第二:关键字强解

2.1 Auto 关键字

也需,你还没见过该关键字,其实他是隐身了的,但是你最常用。编译器在默认的缺省情况下,所有变量都是auto 的。

2.2 访问最快的关键字 Register

学嵌入式的都知道,CPU中寄存器访问速度是最快的,其次就是缓存---然后就是内存----然后就是其他外存,而该关键字,就是请求编译器尽可能的将变量存在CPU 内部寄存器中而不是通过内存寻址访问以提高效率。

2.3 static

该关键字的作用,在面试的时候经常问的。

当修饰变量:

静态全局变量,作用域仅限于变量被定义的文件中,其他文件即使用extern 声明也没法使用它

静态局部变量,在函数体里面定义的,就只能在这个函数里用了,同一个文档中的其他函数也用不了

修饰函数:

函数前加static 使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。

2.4 最冤枉的关键字----sizeof

他不是函数,而是关键字。

char *p;

sizeof(p);---->4  (32为系统)

2.5signed、unsigned 关键字

有符号,无符号关键字,没什么好说的。

如果定义 char test;   取值范围  -128-127

unsgiend char test;   取值范围  0-255

2.6 bool值

面试题目这样出的:

bool 变量与“零值”进行比较的if 语句怎么写?

float 变量与“零值”进行比较

指针变量与“零值”进行比较

答案:

1 :if(bTestFlag); if(!bTestFlag);

原因:1 如果  if(bTestFlag == 0); if(bTestFlag == 1);

bTestFlag 是什么?整型变量?如果要不是这个名字遵照了前面的命名规范,肯怕很容易让人误会成整型变量。所以这种写法不好。

2 如果 if(bTestFlag == TRUE); if(bTestFlag == FLASE);

FLASE 的值大家都知道,在编译器里被定义为0;但TRUE 的值呢?都是1吗?很不幸,不都是1。Visual C++定义为1,而它的同胞兄弟Visual Basic 就把TRUE 定义为-1.那很显然,这种写法也不好。

2:if((fTestVal >= -EPSINON) && (fTestVal <= EPSINON)); //EPSINON 为定义好的精度。

如果:if(fTestVal == 0.0); if(fTestVal != 0.0);

float 和double 类型的数据都是有精度限制的,这样直接拿来与0.0 比,能正确吗?明显不能,看例子:  的值四舍五入精确到小数点后 10位为:3.1415926536,你拿它减去0.00000000001 然后再四舍五入得到的结果是多少?你能说前后两个值一样吗?EPSINON 为定义好的精度,如果一个数落在[0.0-EPSINON,0.0+EPSINON] 这个闭区间内,我们认为在某个精度内它的值与零值相等;否则不相等。扩展一下,把0.0 替换为你想比较的任何一个浮点数,那我们就可以比较任意两个浮点数的大小了,当然是在某个精度内。

3:if(NULL == p); if(NULL != p);

应该没有什么歧义吧

2.7 const 关键字(也是面试问的最多问题之一)

1 修饰的只读变量

const int Max=100;

2 节省空间,避免不必要的内存分配,同时提高效率

#define M 3 //宏常量
const int N=5; //此时并未将N 放入内存中
......
int i=N; //此时为N 分配内存,以后不再分配!
int I=M; //预编译期间进行宏替换,分配内存
int j=N; //没有内存分配
int J=M; //再进行宏替换,又一次分配内存!

3 修饰一般变量

int const i=2; 或const int i=2;

4 修饰数组

int const a[5]={1, 2, 3, 4, 5};或
        const int a[5]={1, 2, 3, 4, 5};

5 修饰指针

const int *p; // p 可变,p 指向的对象不可变
int const *p; // p 可变,p 指向的对象不可变
int *const p; // p 不可变,p 指向的对象可变
const int *const p; //指针p 和p 指向的对象都不可变

注意:记忆方法

先忽略类型名(编译器解析的时候也是忽略类型名),我们看const 离哪个近。“近水楼台先得月”,离谁近就修饰谁。

2.8 最易变的关键字----volatile

volatile 是易变的、不稳定的意思。很多人根本就没见过这个关键字,不知道它的存在。也有很多程序员知道它的存在,但从来没用过它。我对它有种“杨家有女初长成,养在深闺人未识” 的感觉。

作用:(面试题目)

1) 并行设备的硬件寄存器(如:状态寄存器) 
2) 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) 
3) 多线程应用中被几个任务共享的变量

2.9 最会带帽子的关键字----extern

声明为外面变量

A.C

int  TestA=22;

B.c

extern int TestA;

TestA=23;

.......

今天就到这里了,下节 说说结构体

C语言总结之---关键字的更多相关文章

  1. 【C语言入门教程】1.3 C语言“32个”关键字

    关键字是已被C语言标准作为命令.数据类型或者固定函数名的字母组合.关键字不能被用做变量名或函数名.下面列举了C语言的32个关键字,它们遵循C语言的语法使用,形成了C程序设计语言.  序号  关键字 说 ...

  2. 解决全局变量共享---C语言的extern关键字用法

    在调试程序时,有一个参数需要在多个函数之间传递,因为是作为调试参数,不想将参数引入到函数中. 很自然的想到使用全局变量来表示这个公共参数,工程代码的结构如下: main.c test.c test.h ...

  3. 【转载】理解C语言中的关键字extern

    原文:理解C语言中的关键字extern 最近写了一段C程序,编译时出现变量重复定义的错误,自己查看没发现错误.使用Google发现,自己对extern理解不透彻,我搜到了这篇文章,写得不错.我拙劣的翻 ...

  4. C语言中的关键字

    1.C语言中的关键字都有实际的意义. 2.C语言中的23个关键字如下: char:声明字符型变量. short:声明短整型变量. int:声明整型变量. long:声明长整型变量. float:声明浮 ...

  5. 从C语言的volatile关键字,了解C#的volatile机制(转载)

    C#中有一个关键字volatile,一直不太明白到底什么时候才用它,只知道在多线程操作同一个变量的时候要使用volatile关键字,下面看到了一篇C语言关于volatile关键字的介绍,写的很不错,其 ...

  6. C语言语法之关键字

    注:该内容整理自以下链接. http://www.cnblogs.com/yezhenhan/archive/2011/10/16/2214420.html 由ANSI标准定义的C语言关键字共32个: ...

  7. 黑马程序员——C语言基础语法 关键字 标识符 注释 数据及数据类型

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (一下内容是对黑马苹果入学视频的个人知识点总结) (一)C语言简单介绍 (1)C语言程序是由函数组成的任何C语言程序都是由一 ...

  8. C语言第三节关键字、标识符、注释

    学习语法之前的提醒 C语言属于一门高级语言,其实,所有高级语言的基本语法组成部分都是一样的,只是表现形式不太一样 就好像亚洲人和非洲人,大家都有人类的结构:2只 手.2只脚.1个头,只是他们外表不太一 ...

  9. c语言之extern关键字

    1.定义 extern,外面的.外来的意思.那它有什么作用呢?举个例子:假设你在大街上看到一个黑皮肤绿眼睛红头发的美女(外星人?)或者帅哥.你的第一反应就是这人不是国产的. extern就相当于他们的 ...

  10. 陈正冲老师讲c语言之const关键字

    1.const 关键字也许该被替换为 readolny const是constant的缩写,是恒定不变的意思,也翻译为常量.常数等.很不幸,正是因为这一点,很多人都认为被const修饰的值是常量.这是 ...

随机推荐

  1. c++,派生类对象可以对基类赋值,基类对派生类不可以赋值

    派生类对象可以对基类对象赋值,赋值时属于派生类独有的部分就舍弃不用. #include <iostream> using namespace std; class DemoA { publ ...

  2. (Problem 17)Number letter counts

    If the numbers 1 to 5 are written out in words: one, two, three, four, five, then there are 3 + 3 + ...

  3. ring0和ring3的区别

    现在探讨内核程序和应用程序之间的本质区别.除了能用WDK编写内核程序和阅读一部分Windows的内核代码之外,我们还需要了解它们的本质是什么,它们和我们熟悉的应用程序有什么区别. Intel的x86处 ...

  4. Python 2.7 学习笔记 元组的使用

    一.元组 python中的元组和列表非常类似,核心区别是元组的内容初始化后是不可以修改的,而队列可以. 关于列表的详细介绍,可查看上一篇列表使用文章. 大部分场景下,能用元组的地方,都可以用列表.但有 ...

  5. pojg487-3279电话号码转换(字符映射)

    http://poj.grids.cn/practice/2974 注意输入中连字符可以任意添加和删除. 描述企业喜欢用容易被记住的电话号码.让电话号码容易被记住的一个办法是将它写成一个容易记住的单词 ...

  6. mojo 接口返回键值对的json格式

    my $c = shift; use DBI; my %hash=(); my $dbUser='zabbix'; my $user="root"; my $passwd=&quo ...

  7. 如何使用银联卡充值美元到BTC-E以及比特币搬砖教程

    1,名词解释 搬砖:就是在价格低的平台买入比特币,然后转移到价格高的平台卖出, 一般而言,BTC-E是国外三大比特币交易所中比特币单价最低的一个站,因为其需要用美元充值,相对不方便.之前国内比特币价格 ...

  8. c语言中scanf()、printf()函数

    函数调用scanf(“%d”,  &weight) 包含两个参数:“%d” 和&weight.C用逗号来隔开函数调用中的多个参数: 但是printf()和scanf()函数比较特殊,其 ...

  9. 高级UIKit-05(CoreData)

    [day06_1_CoreDataPerson]:保存person对象到coreData数据库 保存大量数据时用CoreData保存到数据库,数据库会存在documents目录下 操作步骤: 1.创建 ...

  10. 演练2-2:Guestbook示例应用程序

    为使Guestbook应用程序有用,我们需要为用户提供一些提交数据的方式,将这些数据存储起来,以便稍后进行查看.为了达到这一目标,我们打算对应用程序添加一个数据库,将其作为该留言簿的后台存储库. 1. ...