重要之声明

来源:互联网 发布:淘宝刷单一天能挣多少 编辑:程序博客网 时间:2024/06/05 09:13


声明与定义的区别
声明:把某一个名称引入或者重新引用某个作用域中,一个变量可以被声明多次
定义:定义也属于声明的一种,但该声明必须给出被声明实体的细节,一个变量只能定义一次
例如:int a;它是定义性的声明它的实体的细节是指为变量a在内存中开辟了一个int大小的存储单位,而声明不为变量分配空间
变量的声明有两种情况:
一种是需要建立存储空间的:意思是在声明的同时需要开辟存储空间的。
另一种是不需要建立存储空间的:它的作用只是把一个名称引入或者重新引用到需要这个变量的地方
例如:extern int a  a是在其他文件中定义的变量,在本文件中如果想用它,需要声明。
      Char * const*(*fn)()这个也是声明。它声明了一个指针函数,该函数的返回值是一个指向char的常量指针的指针
    tepedef  char*  STRING 这也是个声明,
(狭义上的称法)一般的情况下我们常常这样叙述,把建立空间的声明称之为"定义",
而把不需要建立存储空间称之为"声明"。把两者区分开。


对与声明它是由自己单独的语法的,要想看懂一个声明必须懂得其中的优先级规则 如看
到这个Char * const*(*fn)()声明你要知道它声明的意思
C语言声明优先级规则
A 从左向右找到第一个声明的名字(也就是标示符),然后按照优先级顺序读取:
B 优先级从高到低依次为:
  B1,声明的名字被括起来的那部分
  B2,后缀操作符部分:也就是运算符
    ()表示这是个函数而【】表示是个数组
B3前缀部分:* 表示是指向。。。。的指针
C如果const 和 volatile 后面是类型说明符(如:int ,long等)那么它作用与说明符
  否者,const ,volume作用于 它左边紧邻的内容(一般是*)

从上也可以看出:一些运算符的优先级别
              1,()  2。【】  3.。*
例如 int*fn()  int*(fn())它是指fn是个函数,它的返回值是int*
                  而并不是指fn是一个指向函数的指针,返回值是int
    int * a[ ]    它是 指a是一个元素为int*的数组


用优先级规则分析c声明:
char *  const *(*fn)()
首先找到声明的名字fn,接下来
1.(*fn)2.(*fn) ()  3. *.(*fn) ()  4 char    *.(*fn) ()  5  char *  const *(*fn)()

它表示fn是一个指向函数的指针,该指针指向的函数的返回值是一个指向char的常量指
针的指针
const  char  *(*c[10])(int **p)
它表示的是c是一个数组,他的元素是函数指针,该指针指向的函数的返回值是一个指向
常量char 的指针

注意const  char * 和char *const 是不一样的
第一个表示的是指针的对象是可读的 第二个表示的是指针是可读的