总结:C关键字详细知识

来源:本站
导读:目前正在解读《总结:C关键字详细知识》的相关信息,《总结:C关键字详细知识》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《总结:C关键字详细知识》的详细说明。
简介:我记得我开始学习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.7const 关键字(也是面试问的最多问题之一)

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

作用:(面试题目)

volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象

1) 并行设备的硬件寄存器(如:状态寄存器)

2) 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)

3) 多线程应用中被几个任务共享的变量

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

声明为外面变量

A.C

int TestA=22;

B.c

extern int TestA;

TestA=23;

.......

提醒:《总结:C关键字详细知识》最后刷新时间 2024-03-14 01:01:15,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《总结:C关键字详细知识》该内容的真实性请自行鉴别。