指针和const限定符搭配

来源:互联网 发布:php 文件上传代码 编辑:程序博客网 时间:2024/04/29 02:01

指针和const搭配不同,对所操作的对象能进行的操作也不同,从组合上看,无非有三种组合:


其中type可为int、char等基本数据类型,也可为构造数据类型


1、const type *ptr:我们称此种组合叫指向const对象的指针

        linux内核中有很多函数参数就是此种类型,比如

                                 void *memcpy(void *__dest, __const void *__src, size_t __n)

        大家可以看到,第二个参数就是用const来修饰的,作用就是在函数内部,不能修改const所修饰的指针的内容,但是入参可以传入任何对象。

        总之一句话,可以修改指向const对象的指针指向不同的对象,但是不能修改其内容。


2、type *const ptr,也可以是type const *ptr:我们称此种组合为const指针,需要注意的是定义此种指针需要在定义时进行初始化。

      一句话总结此种指针的特性:可以修改其指向的对象的值,但是不能修改其所指的对象,也就是说一旦这个指针指向了一个对象,那么他将始终指向这一个对象,不能再将其指向其他对象。

      int temp = 5;

      int temp2 = 6;

      int *const ptr = &temp;  // ok,定义时初始化

       ptr = &temp2;   //error,不能修改其指向的对象

      *ptr = 100;         //ok,可以修改其指向对象的值


3、const type *const ptr:我们称此组合为指向const对象的const指针,他兼有以上两种组合的特性:一旦定义了这个指针指向某个对象,将永远不能再让其指向其他对象,同时也不能修改其所指向对象的内容。


0 0