C语言——类型限定词

1.类型限定词const

        如果变量声明中带有关键词const,则不能通过赋值、增量或减量运算来修改该变量的值。

1.1指针和参量声明中使用const

        const float * pf;

        上面的语句表明pf指向的值必须是不变的,但是pf可一指向其他的位置。

        float * const pf;

        上面的语句表明,指针指向的地址是不可以变的,他必须总是指向同一个地址,但所指向的值可以改变。

        const float * const ptr;

        意味着ptr必须总是指向同一个位置,并且他所指位置存储的值也不能改变。

1.2对全局数据使用const

        因为全局变量是整个程序都可以使用的,可能会造成错误的修改,因此对全局变量使用const限定词是合理的。可以有const变量,const数据和const结构。在文件之间共享const数据时要小心,可以使用两个策略,首先是遵循外部变量的惯用规则:在一个文件中声明,在其他文件中进行引用声明(使用关键字extern);其次是将常量放在一个include文件中,这是还比许使用静态外部存储类。通过使每个标识符称为静态外部的,实际上给每个文件一个独立的数据拷贝。如果文件想使用该数据来与另一个文件通话,这样做就不行了,因为每个文件都只能看到他自己的拷贝,但是因为数据都是不变的且相同的,所以这就不是问题了。(但是因为进行了数据的拷贝,所以有的时候可能造成了不必要的空间浪费)

2.类型限定词volatile

        限定词volatile告诉编译器该变量除了可以被程序改变以外还可被其他代理改变,一个值可以同时是const和volatile,例如,硬件时钟一般设定为不能由程序改变,这一点使它成为const,但是他被程序以外的代理改变,这使它称为volatile。只需在声明中同时使用这两个限定词(限定词的顺序没有要求)。

3.类型限定词restrict

        它只可以用于指针,并标明指针是访问一个数据对象的唯一且初始的方式。如果没有restrict标识符,那么编译器就会考虑在两次使用了指针之间,其它标识符可能改变了数据的值。使用了restrict关键字以后,编译器就可以放心的寻找计算的捷径。关键字restrict有两个读者,一个是编译器,他告诉编译器可以自由的做一些有关优化的假定,另一个读者使用户,他告诉用户使用满足restrict要求的参数。

       

       

你可能感兴趣的:(C语言——类型限定词)