码迷,mamicode.com
首页 > 其他好文 > 详细

const用法-read only

时间:2015-10-02 16:11:52      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:

const用法详解

const 只读(read only)

示例一:只读的int型变量

int main(int argc,const char * argv[]){

    const int a1;
    int const a2;
    
//    a1 = 2;
//    a2 = 3;
    printf("%d\n",a1);
    printf("%d\n",a2);   
}

上面这个例子,在声明int类型的变量a1和a2时,用const修饰符修饰,那就意味着变量a1和a2都是只读的int类型变量,同时被默认初始化,不能再次修改和赋值。

输出打印结果

0

0

Program ended with exit code: 0


示例二:只读的int型变量/int型变量的内存地址非只读

内存地址=指针

int main(int argc,const char * argv[]){

    int a=10;
    int b=12;
    
    int const *a1=&a;
    const int *a2=&a;
    int const *a3=NULL;
    
    
    printf("%p\n",a1);
    printf("%p\n",a2);
    printf("%p\n",a3);
    printf("%d\n",*a1);
    printf("%d\n",*a2);
//    printf("%d\n",*a3);

    
//    *a1 = 11; //指针a1指向的int值read only
//    *a2 = 12; //指针a2指向的int值read only
    a1 = &b;
    a2 = &b;

    printf("%p\n",a1);
    printf("%p\n",a2);
    printf("%p\n",a3);

    printf("%d\n",*a1);
    printf("%d\n",*a2);
//    printf("%d\n",*a3);

}

上面这个例子,声明int型的指针a1和a2,同时用const修饰,这里要弄懂const修饰的是谁,这里const修饰的都是int类型,所以指针指向的int类型的值不可修改和再次赋值,而指针(内存地址)a1和a2都是可以再次修改和赋值的。当修改了指针的值(内存地址)后,指针指向的值也会变化。

输出打印,

0x7fff5fbff7ac

0x7fff5fbff7ac

0x0

10

10

0x7fff5fbff7a8

0x7fff5fbff7a8

0x0

12

12

Program ended with exit code: 0


示例三:内存地址只读/内存地址存储的值非只读

int main(int argc,const char * argv[]){
    int a = 12;
    int * const a1 = &a;
    printf("%p\n",a1);
    printf("%d\n",*a1);
   
    int b = 14;
//    a1 = &b; //内存地址a1 read only,不能再次被修改和赋值
    *a1 = b;
    printf("%p\n",a1);
    printf("%d\n",*a1);
}

如上面这个例子,const修改的是int* ,也就是int指针,也就是内存地址是const的,而内存地址存储的值非const,也就是非read only。

输出打印,

0x7fff5fbff7ac

12

0x7fff5fbff7ac

14

Program ended with exit code: 0


示例四:只读的int型变量/只读的内存地址

int main(int argc,const char * argv[]){
    
    int a = 12;
    const int * const b = &a;
    printf("%p\n",b);
    printf("%d\n",*b);
    
    int a1 = 13;
//    b=&a1;
//    *b=a1;
    printf("%p\n",b);
    printf("%d\n",*b);
}

如上面这个列子,还是要搞懂const修饰的是谁,在这里出现了两个const,前一个const修饰的是int,也就是说内存地址存储的值的是只读的。后一个const修饰的是*,也就是指针,也就是说内存地址是只读的。

输出打印如下,

0x7fff5fbff7ac

12

0x7fff5fbff7ac

12

Program ended with exit code: 0


确定const修饰谁

const在谁后面谁就不可修改,const在最前面则将其后移一位即可,二者等效

 

const作用

(1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了;

(2)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;

(3)在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值;

(4)对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量;

======END======

const用法-read only

标签:

原文地址:http://my.oschina.net/xinxingegeya/blog/513210

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!