声明

来源:互联网 发布:软件测试需要培训吗 编辑:程序博客网 时间:2024/04/29 01:27

1. 声明的语法

[声明的格式] 声明说明符 声明符;

声明说明符分为三类:

存储类型:有四种:autostaticexternregister

类型限定符:有两种:constvolatile

类型说明符:关键字voidcharshortintlongfloatdoublesignedunsigned

        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用来修饰一个常量,有如下两种写法:

1const在前面

  const int  value    //valueconst

  const char*pvalue;     //* pvalueconst, pvalue可变

  const (char*) pvalue;   // pvalueconst,* pvalue可变

  char* constpvalue;     // pvalueconst,* pvalue可变

  const char*const pvalue; // pvalue Content* pvalue都是const

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

  int const value      // valueconst

  char const *pvalue;     // * pvalueconst, pvalue可变

  (char *)const pvalue;    // pvalueconst,* pvalue可变

  char* const pvalue;      // pvalueconst,* 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型对象的值。

 

 

 

原创粉丝点击