const用法-read only

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======

时间: 2024-10-18 22:02:05

const用法-read only的相关文章

C++ Primer 学习笔记_25_类与数据抽象(11)--const 用法小结、static与const以及static const(const static)

一.const 用法总结 1.可以对const 的用法做个小总结: const int n = 100;  //定义常量 const Test t(10); const int & ref = n;   //const引用 int& ref = n;  //Error [const与指针] const int* p; //const出现在*前面,表示*p是常量 (*p = 200; //Error) int * const p2;  //const出现在*后面,表示p2是常量 (p2 =

C++中const用法总结

1. const修饰普通变量和指针const修饰变量,一般有两种写法:const TYPE value;TYPE const value;这两种写法在本质上是一样的.它的含义是:const修饰的类型为TYPE的变量value是不可变的.对于一个非指针的类型TYPE,无论怎么写,都是一个含义,即value只不可变.例如:const int nValue:         //nValue是constint const nValue:    // nValue是const但是对于指针类型的TYPE,

#define static const 用法 (转)

1.Define用法: define主要是用于宏常量定义的,使程序看起来更简洁明了,方便代码维护,#define定义的实质只是一个常数的名字,没有具体数据类型的,没有分配内存空间.在编译是会被编译器替换为该常数.每次使用该宏定义,就要进行编译并分配空间,若一个程序中多次使用define定义的数据,则就会有多份拷贝.这么做是为了提高程序的可读性,但安全性相对差点. 2.const用法: const定义的全局数据变量,其基本作用和define相同,但又在define的基础上增加了好多功能.const

【转】话说C语言const用法

原文:话说C语言const用法 const在C语言中算是一个比较新的描述符,我们称之为常量修饰符,意即其所修饰的对象为常量(immutable). 我们来分情况看语法上它该如何被使用. 1.函数体内修饰局部变量.例:void func(){const int a=0;} 首先,我们先把const这个单词忽略不看,那么a是一个int类型的局部自动变量,我们给它赋予初始值0. 然后再看const. const作为一个类型限定词,和int有相同的地位.const int a;int const a;是

const 用法详解

const用法详解 面向对象是C++的重要特性. 但是c++在c的基础上新增加的几点优化也是很耀眼的 就const直接可以取代c中的#define 以下几点很重要,学不好后果也也很严重 const 1. 限定符声明变量只能被读 const int i=5; int j=0; ... i=j;   //非法,导致编译错误 j=i;   //合法 2. 必须初始化 const int i=5;    //合法 const int j;      //非法,导致编译错误 3. 在另一连接文件中引用co

C++中的const用法(2)

前面写过一篇博客介绍const用法:C++中的const用法 今天发现有个忙点,特此补充. 我们知道,一般const修饰指针时有三种情况. <span style="font-size:18px;">const int *p;</span> 这表示p指向一个int型的const变量,但是指针本身并不是const. int a = 0; int *const p = &a; 这种情况表示指针是const,一旦初始化不能指向另外的数据. int a = 0;

C/C++——const用法完整总结

一直以来都没有总结const修饰符的用法,总是感觉const的用法太多,要记住的情况太多,不能够掌握所有的情况,所以总是不了了之.但是如果没有彻底掌握const用法的话,心里总是感觉知识还欠缺很多,还要很多知识点没有掌握.如果自己真正的总结完之后,其实也只有这么多用法. const修饰数据成员,成员函数,类对象. const修饰数据成员 修饰数据变量,保证数据变量只能在定义的时候进行初始化,并且在程序的执行过程中不能被再次赋值. 1.修饰类中的数据成员变量,可以直接在声明的时候进行初始化(con

const用法归纳总结 C++

非常好的一篇分析const的总结归纳, 在此谢谢原作者:http://blog.csdn.net/zcf1002797280/article/details/7816977 在普通的非 const成员函数中,this的类型是一个指向类类型的 const指针.可以改变this所指向的值,但不能改变 this所保存的地址.在 const成员函数中,this的类型是一个指向 const类类型对象的 const指针.既不能改变 this所指向的对象,也不能改变 this所保存的地址. 关键字:Const

【c++】C++中const用法总结

1.      const常量,如const int max = 100; 优点:const常量有数据类型,而宏常量没有数据类型.编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误. 2.      const 修饰类的数据成员.                                                                const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的.因