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

c语言笔记1-关键字

2017-07-16 11:16 211 查看


1.数据类型:固定内存大小的别名,创建变量的模子。

例:char:1byte的别名;short:2byte的别名;int:4byte的别名

2.变量:一段实际联系存储空间的别名。程序中通过变量来申请并命名存储空间。通过变量名可以使用存储空间。

3.typedef:自定义数据类型。不是创造新的数据类型,只是给现有的数据类型重新命名。

例:typedef 
int  INT32;//sizeof(INT32)=
sizeof(int)=4

typedef unsigned char BYTE;//sizeof(BYTE)=sizeof(unsigned
char)=1;

typedef struct _demo

{

 short s;  
//2

 BYTE b1; 
//1

 INT32 I;  
//4

}DEMO;//sizeof(DEMO)=7

4.属性关键字(auto 
static register)指明变量特有意义。

auto: c语言中局部变量默认属性,在栈上分配空间。

static
:变量的静态属性,只被初始化一次

      同时具有“作用域限定符”的意义

      修饰的局部变量存储在程序的静态区

      另一意义为文件作用域标示符

      修饰的全局变量/函数作用域只在声明文件中

register:
将变量存储于CPU寄存器

      只是请求寄存器变量,但不一定请求成功

      Register变量必须是CPU寄存器可以接受的值

      不能用&运算符求register变量地址

      寄存器变量用于讲究性能,对实时性要求高的实时系统中

5.if

 
① bool型变量出现在条件中,不要进行比较

 
例:bool b=TURE;

     If(!b){……}【√】

If(b){……}【√】

If(b == 1){……}【×】

 

普通变量与0/常数比较时,0值/常数应出现在比较符号左边

 
例:if( 0 
==  x)  【可以避免if(0=x)的错误】

 
③ float
型变量不能直接进行0值比较,需要定义精度

 
例:#defineEPSI 
0.000001

     Float f= 0.0,f1=5.0;

     If((-EPSI<=f)&&(f<=EPSI)){……}//替代if
(0==f)

     If((5-EPSI<=f1)&&(5+EPSI>=f1))//替代if(5.0==f1)

6.switch

 
① case
语句中的值只能是整形或字符型

 
② case排序
:按字母、数字顺序排序

               
正情况在前、异常情况在后

               
Default必须有,用于异常情况或默认

 
③if
可以替代switch 
, switch无法替代if

7.break:终止循环,用于跳出块

 Continue:终止本次循环,进下次循环,用于跳出循环

 Switch不能用continue
关键字,因为switch
本身没有循环

8.do{}while();的妙用:

do

{

  if(……) 
break;

if(……) 
break;

……

}while(0);

9.goto:应禁用
,程序质量与goto出现次数成反比

10.void*指针:作为左值用于“接收”任意类型指针

            作为右值赋值给其他指针需强制类型转换

例:实现memset的功能

void* my_memset(void* p,char v,int size)

{

  void* ret=p;

  char dest= (char*)p;

  int i =0;

  for(i=0;i<size;i++)

  
{

    
dest[i]=v;

}

return ret;

}

int main()

{

 
inta[5]={1,2,3,4,5};

 long l=1000;

int i=0;

my_memset(a,0,sizeof(a));//a[5]={0,0,0,0,0}

 

my_memset(&l,0,sizeof(l));//l=0

return 0;

}

11.extern:
声明外部定义的变量的函数

        用于“告诉”编译器c的方式编译

例:extern 
“C”

  
{…...}

12.sizeof :编译器内置指示符,不是函数

       用于计算相应实体所占用内存大小

       Sizeof的值在编译器就已经确定

例:int a;

sizeof(a);【√】

sizeof 
a;【√】

sizeof(int);【√】

sizeof 
int;【×】

13.const:常变量

    
修饰的变量是只读的,本质还是变量

    
会占用内存空间

    
可以通过指针来改变值

例:const intc=1;

   
Int *p = (int*)&c;

*p = 3;

Const
修饰的数值空间不可改变。

14.const
指针

 
const  int*p;/int const*p;//p可变,p指向的内容不可改变

 int 
const*p;//p不可变,p指向的内容可变

const 
int*const p;//p和p指向的内容不可变

总结:左数右指

     
当const
出现在*号左边时指向的数据为常量

当const
出现在*号右边时指针本身为常量

15.volatile 编译器警告指示字

         用于告诉编译器必须每次去内存中取变量值

         主要修饰可能被多个线程访问的变量

        也可修饰可能被未知因素更改的变量

16.柔性数组:大小待定的数组

C语言结构体的最后一个元素可以是大小未知的数组
,用结构体产生柔性数组

Typedef struct 
_soft_array

{

  
Intlen;

  
Intarray[];

}softArray;

17.struct与union

 
Struct中的每个域在内存中独立分配空间

 
Union只分配最大空间,所有域共享这个空间

例:struct 
c                       union c

{                                 
{

 
Inta;                               int a;

 
Intb;                               int b;

}//sizeof(c):8byte                    
}//sizeof(c):4byte

18.enum:枚举 

 定义常量

         默认常量在前一个值基础上依次加1

         变量只能取定义时的离散值

枚举与#define区别

①#define宏常量只是简单的进行值得替换,枚举常量是真正意义上的常量

②#define宏常量无法被调试,枚举常量可以

③#define宏常量无类型信息,枚举常量是一种特定类型常量

19.typedef 用于给一个已经存在的数据类型命名

          并没有定义新额类型

Typedef重定义的类型不能进行unsigned和signed扩展

Typedef与#define区别

Typedef是给已有的数据类型取别名

#define为简单的字符串替换,无别名的概念
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 关键字