您的位置:首页 > 编程语言 > C语言/C++

还有这种操作!!!!!(C语言关键字)

2017-10-18 20:10 169 查看
截至目前为止,C语言关键字共有32个,它们分别是:

1、{auto、static}//动态静态空间开辟

2、{char、short、int 、long 、float 、double 、unsigned 、signed}、//类型

3、{ if、 else 、do 、while、 switch、 case、 break、 default、 continue、 goto、 for }、//判断,选择,循环语法

4、{const 、enum、 extern、 register、 sizeof、 struct、 typedef、 union、 void、 volatile、 return }//特殊意义关键字

大致可分为这么4个类别,那么,接下来就简单介绍一下第4组,常用的特殊关键字。

No1,[b]**********const*********[/b]

在程序员编译过程中,可将不希望后期发生改变的变量加上const加以保护, 在C语言中,const 定义的常变量,具有常属性,其值不可改变,但本质上还是变量。在C++中,直接将const定义的变量当作常量处理。举个栗子:

void test()
{
const int num=1;
int array[num]={0};
//在.C中,const 定义的常变量,具有常属性,但仍是变量,故而,这样书写是错误的,但在.cpp文件中,这样书写就是正确的,直接将num当作常量对待。
}
#include<stdio.h>
int main()
{
const int num=10;
num=20;//这里对num进行了值得修改,程序失败
printf("%d\n",num);
return 0;
}


No2、[b]**********enum*********[/b]

enum(枚举):简单的说枚举也是一种数据类型,这种数据类型只包含数据的集合,举个栗子:

enum Sex  {
MALE,       //0
FEMALE,//1
SECRET//2
};


用法: enum Sex sex=MALE;

enum Sex  {
MALE=1,       //1
FEMALE=2,    //2
SECRET=3     //3
};
//枚举允许附初值


No3、[b]**********extern*********[/b]

extern 是用于变量,函数声明的关键字。

extern int g_val;//变量声明
extern void test();//函数声明
int main()
{
void test();//hello world
printf("%d\n",g_val);//2017
}
void test()
{
printf("helloworld\n");
}
int g_val=2017;


实际上,程序若直接写int g_val;但主函数输出值将会把g_val按全局变量处理,输出值为0;为了区别,故而在变量前加上extern,来说明该条语句仅是变量(函数)声明。

No4、[b]**********register*********[/b]

register寄存器变量。



如图所示,运行速度寄存器>高级缓存区>内存>硬盘,故而,将一些运算数值较大的放在register中,作用是建议CPU优先从寄存器中取值处理,但

register int num=10;
&num


这种操作时错误的,&(取地址运算符)是找到变量在内存中的地址空间,而显然寄存器不属于内存中的一部分,所以&num找不到相应地址。

No5、[b]**********static*********[/b]

static静态变量的定义。

static修饰局部变量,改变局部变量的生命周期,不改变作用域

static修饰全局变量,改变全局变量的作用域,不改变生命周期

void test1()
{
static int a=1;
a++;
printf("%d",a);
}
static int g_val=1;
void test2()
{
g_val=1;//变量赋值
g_val++;
printf("%d\n",g_val);
}
int main()
{
int i=0;
for(i=0;i<10;i++)
{
void test1();//2,3,4,5,6,7,8,9,10,11
void test2();//2,2,2,2,2,2,2,2,2,2
}
return 0;
}


No6、[b]**********typedef*********[/b]

typedef类型定义形式:typedef 被替换类型 替换类型

int main()
{
unsigned int age=20;
unsigned int aver=20;
unsigned int score=20;
unsigned int size=20;
printf("%d\n",age);
}


上述例子中,多次出现unsigned int 类型,为了后继便于书写,可将该类型重新定义,如typedef unsigned int unit;后面凡遇到unsigned int 的地方均可用unit代替。如:unit age=20;

No7、[b]**********void*********[/b]

void 无返回值类型

void test()
{
printf("hello world\n");
}
int main()
{
test();
test(1);
test(1,2);
test(1,2,3);
}
//屏幕上输出四次hello world


void test(void)//第一个void 代表函数无返回值,第二个代表函数无参
{
printf("hello world\n");
}
int main()
{
test();
test(1);
test(1,2);
test(1,2,3);
}
//编译错误,程序无法正常执行


No8、[b]**********volatile*********[/b]

voiltile保证内存的可见性,每次对num的值从内存中取,而并非从寄存器中直接取

int main()
{
const int num=10;
int* p=(int*)#
printf("%d\n",num);//运行结果为10
*p=20;
printf("%d\n",num);//运行结果为10
}


这段代码执行完毕后,程序运行结果均为10,但观察内存可知,在程序运行的过程中num确实被改到20,这是什么情况哩?怎么解决?

int main()
{
volatile const int num=10;
int* p=(int*)#
printf("%d\n",num);//运行结果为10
*p=20;
printf("%d\n",num);//运行结果为20
}
//这里volatile 保证内存的可见性。


No9、[b]**********sizeof*********[/b]

sizeof求变量内存空间所占字节数。用法形式为sizeof(类型)或sizeof(变量名),举个栗子:

int main()
{
int a=10;
int array[10]={0};
printf("%d\n",sizeof(int));   //4
printf("%d\n",sizeof(a));    //4
printf("%d\n",sizeof(array));  //4*10=40
return 0;
}


No10、[b]**********struct********[/b]

代码九九归一,至于这第十个,struct,欲知后续结果,请看下回分解
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐