C语言之标准C语言32个关键字

C语言之标准C语言32个关键字

1、基本数据类型:

signed unsignedchar int float double short long void

2、构造数据类型:

struct union enum

3、数据存储类别:
auto static extern register

4、数据优化:

const volatile

5、9条基本语句:

if else switch case break defaultwhile do for return continue goto

6、其它:

typedef sizeof​

预编译处理符 “#”
#include
#define
#ifdef
#ifndef
#if
#else
#else if
#endif
等等。

一、基本数据类型:

1unsigned :无符号的

//用来声明一个无符号的变量。

unsigned char var; //var的范围:0~255

2signed :有符号的(可以省略不写)

//用来声明一个有符号的变量。

signed char var; //var的范围:-128~127

3char :字符型//用来声明一个字符型变量。//占一个字节空间char var;
4int :整型

//用来声明一个整型变量。

//C51:占两个字节空间,ARM:占四个字节int var; 

5float :浮点型

//用来声明一个浮点型(实型)变量。

//最多能表示到7个有效数据位。


//占四个字节空间float var; 

6double :双精度型

//用来声明一个双精度实型变量。

//最多能表示到15~16个有效数据位。

//占四个字节空间 ,有的系统占八个字节double var; 

7short :短整型

//用来声明一个短整型变量。

//C51:跟int一样,ARM:占两个字节short var; 

8long :长整型

//用来声明一个长整型变量。

//ARM:跟int一样,C51:占四个字节long var;

9void :空型

​//表示一个函数没有返回值,或者无形参。void function(void);

二、构造数据类型:
1、struct
//用来声明一种结构体类型。

struct stu{
char sex;
int age;
float score;
struct stu *Next;
};
struct stu var; 

2、union
//用来声明一种共用体类型。
//该类型的变量所在空间的大小以其成员占最大的那个为准,
//存入该变量中的值以程序中最后存入的数值为当前值

union non{
char sex;
int age;
float score;
};
union non var; 

3、enum
//用来声明一种枚举类型。
//规定枚举类型的变量,只能在限定的范围内取值
//否则,编译会出现警告(达到数据安全的效果)

enum em
{a = 23,b,c,d = 56,e}; //其中b=24,c=25,e=57
enum em var;

三、数据的存储类别:
1、auto :自动的(可省略不写):

//定义一个局部变量,默认为auto类型的,
//当它所在的函数调用结束时,释放内存
//使用时才分配内存,用完即释放
auto char var; 

2、static :静态的

//①定义一个局部变量,该变量在定义时只进行
//一次初始化,以后每次调用它所在的函数,其值
//都会保持上一次调用的结果,它所在的空间不会
//被释放
//②被static修饰的全局变量,则只能在它所在的C
//源文件中使用,其它文件不能调用,(内部全局变量)
//③被static修饰的函数,只能在该函数所在的C源文
//件中被调用,其它文件不能调用,(内部函数)
static char var;
static void function();

3、extern :外部的:

//①想要调用别的C源文件中的某一个全局变量,
//可以使用该关键字在该文件中修饰声明该变量
//即可调用(前提是该变量没有被static修饰)
//该类型的变量也是一直占着内存不释放
//②想要调用别的C源文件中的某一个函数,
//可以使用该关键字在该文件中修饰声明该函数
//即可调用(前提是该函数没有被static修饰)
extern char var;
extern void function();

4、register :寄存器的:

//被这个关键字修饰的变量,建议编译器将该变量在
//使用时放到CPU内部寄存器中,以提高执行效率
//注意:该关键字只是"建议",到底有没有将变量放到
//寄存器中无从得知。一般使用在循环次数比较多的
//地方。
//在使用时才分配内存,用完即释放
register long i = 30000;

四、数据优化:
1、const :常的:

//常变量:被const关键字声明的变量,其值不能被改变。
//即在声明该变量时必须要初始化该变量。
//var本身还是一个变量。(数据安全检测)
const char var = 100;
char arr[var]; //试图声明一个长度为100的字符型数组
//在MDK (ARM)中可以使用常变量来声明数组的长度
//在VC++编译环境中也可以。
//在C51-keil中不可以使用常变量来声明数组的长度
char *const p;
//指针变量p不可改变,但是它指向的地址里面的值可变 
char const *p;const char *p;
//指针变量p可以改变,但是它所指向的地址里面的值不能改变 
const char * const p; //p地址不可改变,里面的值也不能变

2、volatile :随时会改变的:

//被volatile修饰的变量或寄存器会意想不到地发生改变。
//①某些变量或寄存器(如状态寄存器)可能会受硬件影响;
//②在多线程任务中,被其它线程修改(共享内存段);
//③一个在中断服务中使用到的全局变量
//④编译器会对C程序进行优化;
//为了保证程序不被优化,保证CPU取到的数据是最新的
//(即提醒CPU每次都必须到内存中取出变量当前的值而不
//是取cache或者寄存器中的备份),使用该关键字修饰,如:
int *p; *p = 1; *p = 2;
//编译时,编译器会对上面的语句进行优化,
//会直接优化成:
int *p; *p = 2;
//为了保证上面的语句不被优化,加volatile修饰变量:
int * volatile p;

五、9条语句:
四种结构:
1、顺序结构:0条
//声明语句、运算语句、赋值语句等等
2、选择结构:2条
//多选一 ①、if -else if -else if … else

if(表达式1) {语句s;}
else if(表达式2) {语句s;}
else if(表达式3) {语句s;}
else
{语句s;}
//用法:顺序判断if后的"表达式"是否为真
//如果碰到为真的情况,则执行其下面的{}里的"语句"
//执行完后,即退出这个"多选一"的结构 ②、switch-case-break
switch(变量) {
case 常量1:语句;...;break;
case 常量2:语句;...;break;
case 常量3:语句;...;break;
default:语句; }
//用法:顺序判断"变量"是否与"常量"相等,
//如果相等,则执行该常量:后的"语句s",遇到break即跳出
//这个结构
unsigned char i = 6;
unsigned char dat;
switch(i) {
case 3:dat = 5;break;
case 5:dat = 34;break;
case 6:dat = 99;break;
case 7:dat = 56;break;
case 6:dat = 100;break;
default:dat = 68; //默认执行
}
//注:如果少了break,则顺序判断i的值与
//case后面的常量是否相等,如果相等,则执行其
//后面的语句,以后不再判断,再继续执行下面的
//每一条case 后面的语句,直到default.
//这种用法不使用!

3、循环结构:3条

 ①、for
for(语句1;语句2;语句3) {
语句4;
语句...;
}
//用法:语句1:条件初始化
// 语句2:判断语句,判断条件是否成立
// 语句3:修改条件语句
//先执行语句1,再进行对语句2的判断,如果成立
//则执行{}里的语句4...,再执行语句3,在判断
//语句2是否依然成立,。当语句2不成立时,结束循环
②、while
while(表达式) {
语句;
....;
}
//用法:先判断“表达式”是否成立,如果成立
//则执行{}里的语句,执行完再次判断“表达式”
//是否依然成立,成立则继续执行{},不成立则结束
//此循环结构。
如何来设计一个死循环?两种方法:
for(;;)
while(1) ③、do-while
do{
语句1;
...;
}while(表达式);
//用法:先执行{}里的语句,执行完后,判断
//"表达式"是否成立,如果成立,继续执行{};
//如果不成立,则结束循环

4、转移结构:4条

①、break
//仅用于跳出循环结构
//且仅能跳出一层循环结构
for(i=10;i>0;i--)
{ t = 10;
while(t--)
{
dat++;
if(dat == 3)
break;//跳出while()结构。
} }②、continue
//用于终止本次循环,继续从下次循环开始
//正式程序中不使用,仅用于调试程序
char buf = 10;
while(buf--)
{ a++;
b++;
continue;//遇到continue则结束这次循环
d++; //这条永远都不会执行到 e++; //这条永远都不会执行到 }③、goto
//无条件转移 
//一般都不建议在大的程序当中使用
unsigned char dat=10;
while(dat--)
{ a++;
b++;
Lable: c++;
if(c == 3)
goto Lable;//直接跳到Lable标号去 d++;
}④、return
//用于函数返回,
//在函数调用时,遇到return即返回。
//如果需要返回某个值,在其后加上返回值。
//返回值类型必须和函数类型一致。
void function()
{
char a,b; a++;
return; //遇到return即返回调用处
b++; //不会被执行
return; //不会被执行
}

六、其它:
1、typedef : 类型重定义:

typedef unsigned char uchar;
//用uchar重新定义unsigned char
#define uchar unsigned char
//用uchar 替换unsigned char

跟宏定义的区别:

①、typedef 是在编译阶段进行定义
宏定义是在预编译处理阶段完成展开
②、typedef 是类型重新定义,不是简单地替换
宏定义只是简单的替换,没有定义
typedef unsigned char* M;
#define M unsigned char*
M p1,p2;
//对于typedef来说:p1是指针变量,p2也是
//对于宏定义来说:p1是指针变量,p2是普通变量

2、sizeof

//用来求类型所占的字节数
int var = 10;
char g; g = sizeof(var++);//g = 4;
//注意:var++该条语句没有被执行!
//()里的语句是不会被执行的。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值