现在的位置: 首页 > 综合 > 正文

声明

2013年08月16日 ⁄ 综合 ⁄ 共 2059字 ⁄ 字号 评论关闭



1.

声明的语法

[

声明的格式

]

声明说明符 声明符;

声明说明符分为三类:

存储类型

:有四种:auto

static

extern

register


类型限定符

:有两种:const

volatile


类型说明符

:关键字void

char

short

int

long

float

double

signed

unsigned


       

typedef

创建的类型也是类型说明符。

类型限定符和类型说明符必须跟随在存储类型的后边,但是两者的顺序没有严格的限制。

例如:

存储类型        

类型说明符

extern
 

const

unsigned long int

a[10]

;

        

类型限定符                     

声明符

 

2.

解释复杂声明

int *(*x[10])(void);

这个声明组合了

*

[]

()

,所以

x

是指针、数组还是函数并不明显。

幸好有两条简单规则来理解任何声明:

一是始终从内往外读声明符

。换句话说,定为用来声明的标识符,并且从此处的声明开始解释。

二是在做选择时,始终先是

[]

()

后是

*

。如果

*

在标识符的前面,而标识符后被跟着

[]

,那么标识符表示数组而不是指针。同样,如果

*

在标识符的前面,而标识符后边跟着

()

,那么标识符表示是函数而不是指针。

例如:

Int *ap[10];

ap

是标识符,由于

*

在标识符的前面,后跟着

()

,所以

ap

是指针数组。

 

例如:

float *fp(float);

fp

是标识符,由于

*

在标识符的前面,后跟着

()

,所以

fp

是返回指针的函数。

 

例如

   void

 

(*pf)

 

(int)

;

1             

(1)

指针指向

 

             

2       

(2)

具有

int

型实际参数的函数

3            

      
    
(3)

返回

void

型值

 

例如:

int

 

*(*

 

x[10]

) 

(void)

1                

(1)

数组

2           

 

     
    
(2)

指针指向

                      
     
3     

(3)

不带实际参数的函数

4                                 

(4)

返回

int

型的指针

 

注意:

C

语言中有不能声明的特定内容。函数不能返回数组:

int f(int)[];          

/* 

WRONG*/

函数不能返回函数:

int g(int)(int);       

/* 

WRONG*/

函数型的数字也是不可能的:

int a[10] (int);      

/* 

WRONG*/

 

3. const

与指针

类型限定符

const

用来修饰一个常量,有如下两种写法:

1

const

在前面

 

const int  

value

  

  

//value

const

 

const char
*pvalue;  

   

//* pvalue

const, pvalue

可变

 

const (char
*) pvalue;   

// pvalue

const,* pvalue

可变

 

char* const
pvalue; 

 

  

// pvalue

const,* pvalue

可变

 

const char*
const pvalue; // pvalue Content

* pvalue

都是

const

2

const

在后面,与上面的声明对等

 

int const value

     

// value

const

 

char const *
pvalue;    

// * pvalue

const, pvalue

可变

 

(char *)
const pvalue;   

// pvalue

const,* pvalue

可变

 

char* const pvalue;     

// pvalue

const,* pvalue

可变

 

char const*
const pvalue; 

// pvalue

* pvalue

都是

const

 

这里有这么一个规则(因为

()

的出现,使得这个规则有时候是不成立的

)

:沿着

*

号划一条

线,如果

const

位于

*

的左侧,则

const

就是用来修饰指针所指向的变量,即指针指向为常量;如果

const

位于

*

的右侧,

const

就是修饰指针本

身,即指针本身是常量。

特别注意:对于

const (char *) ;

因为

char *

是一个整体,相当于一个类型

(

char)

,因此,这是限定指针是

const

 

4. const

#define

const

的好处如下:

1. const

是文档格式。声明对象是

const

类型就是对象的值不会改变

2.

编译器可以检查到程序不会特意地试图改变对象的值

3.

当为某种可能的应用类型编写程序时

(

嵌入式

)

,编译器可以用单词

const

来确定数据存储到

ROM

中。

const

#define

的差异

1.

可以

#define

指令产生数字常量、字符常量或字符串常量的名字。

const

可用于产生任何类型的只读对象,包括常量数组、常量指针、常量结构和常量联合。

2. const

类型的对象遵循和变量相同的作用域规则,而用

#define

产生的产量不遵循这规则,

3.

和宏值不同,可以在调试器中看到

const

型对象的值。

 

 

 

抱歉!评论已关闭.