const修饰指针(C++ const 用法)
本文目录
- C++ const 用法
- C语言的const关键字与指针搭配使用
- 关键字const的含义及其作用
- const int a; int const a; const int *a; int * const a; int const * a const; 之间的区别
C++ const 用法
1. const常量,如const int max = 100; 优点:const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误。2. const 修饰类的数据成员。 const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的。因为类可以创建多个对象,不同的对象其const数据成员的值可以不同。所以不能在类声明中初始化const数据成员,因为类的对象未被创建时,编译器不知道const 数据成员的值是什么。 const数据成员的初始化只能在类的构造函数的初始化表中进行。3. const修饰指针的情况,见下式: const int* a = & int const *a = & int* const a = & const int* const a = & 可以参考《Effective c++》Item21上的做法,如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。因此,为指针本身和指向的内容均为常量。 4. const的初始化 先看一下const变量初始化的情况 1) 非指针const常量初始化的情况:A b; const A a = b; 2) 指针const常量初始化的情况: A* d = new A(); const A* c = d; 或者:const A* c = new A(); 3)引用const常量初始化的情况: A f; const A& e = f; // 这样作e只能访问声明为const的函数,而不能访问一般的成员函数; 5. const在函数声明中的应用 在函数声明中,const 可以修饰函数的返回值,或某个参数;对于成员函数,还可以修饰是整个函数。1) 修饰参数的const,如 void fun0(const A* a ); void fun1(const A& a); 调用函数的时候,用相应的变量初始化const常量,则在函数体中,按照const所修饰的部分进行常量化,如形参为const A* a,则不能对传递进来的指针的内容进行改变,保护了原指针所指向的内容;如形参为const A& a,则不能对传递进来的引用对象进行改变,保护了原对象的属性。 :参数const通常用于参数为指针或引用的情况,且只能修饰输入参数;若输入参数采用“值传递”方式,由于函数将自动产生临时变量用于复制该参数,该参数本就不需要保护,所以不用const修饰。 对于非内部数据类型的输入参数,应该将“值传递”的方式改为“const引用传递”,目的是为了提高效率。例如,将void Func(A a)改为void Func(const A &a) 对于内部数据类型的输入参数,不要将“值传递”的方式改为“const引用传递”。否则既达不到提高效率的目的,又降低了函数的可理解性。例如void Func(int x)不应该改为void Func(const int &x)2) 修饰返回值的const,如const A fun2( ); const A* fun3( ); 这样声明了返回值后,const按照"修饰原则"进行修饰,起到相应的保护作用。 1) 一般情况下,函数的返回值为某个对象时,如果将其声明为const时,多用于操作符的重载。通常,不建议用const修饰函数的返回值类型为某个对象或对某个对象引用的情况。2)如果给采用“指针传递”方式的函数返回值加const修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const 修饰的同类型指针。6. 类成员函数中const的使用 一般放在函数体后,形如:void fun() const; 任何不会修改数据成员的函数都因该声明为const类型。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其他非const成员函数,编译器将报错,这大大提高了程序的健壮性。7. 使用const的一些建议 1 要大胆的使用const,这将给你带来无尽的益处,但前提是你必须搞清楚原委; 2 要避免最一般的赋值操作错误,如将const变量赋值,具体可见思考题; 3 在参数中使用const应该使用引用或指针,而不是一般的对象实例,原因同上; 4 const在成员函数中的三种用法(参数、返回值、函数)要很好的使用; 5 不要轻易的将函数的返回值类型定为const; 6除了重载操作符外一般不要将返回值类型定为对某个对象的const引用;
C语言的const关键字与指针搭配使用
C语言的const关键字与指针搭配使用,const是C语言中保留的一个关键字,它用来限定一个变量是只读的,即不可变的。程序中使用const可以在一定程度上提高程序的健壮性,但是程序中使用过多的const,可能在对代码的阅读时增加一定的难度。(1)用const修饰一般变量注意在C语言中,用const修饰的变量必须在声明时进行初始化(用来修饰函数的形参除外);如:const int n; 这种声明方式是错误的const int n=5; 正确void fun(const int n); 正确const char a; 错误char * const p; 错误const char *p;正确(注意这种为什么是正确的),因为这里const是修饰p指向的变量,而不是指针变量p本身一旦一个变量被const修饰后,在程序中除初始化外对这个变量进行的赋值都是错误的。如:const int n=5;n=3; 错误(2)const与指针搭配使用首先必须弄清楚两个基础概念:指针常量和常量指针指针常量:即指针本身的值是不可改变的,而指针指向的变量的值是可以改变的;常量指针:即指针指向的变量的值是不可改变的,而指针本身的值是可以改变的;可以这样去理解:因为指针本身也是一个变量,只不过指针存放的是地址而已,而一旦指针变成了常量,即指针本身的值是不可变的,此时指针只能指向固定的存储单元;指针一般会指向一个变量,如果该变量成为一个常量,那么该变量的值就不能被修改,即常量指针,指针指向的是一个不可变的变量。如:1 int a=3;2 const int *p=a;3 int const *p1=a;4 *p=4;5 a=4; 第2行和第3行是等价的;第四行是错误的,因为用const限定p指向的变量的值是不可修改的,即不可通过指针p去修改变量a的值;第五行是正确的,因为a本身没用const进行修饰,即a本身的值是可以修改的.1 int a=1; 2 int b=2; 3 const int *p; 4 int const *p1; 5 int * const p2; 6 int * const p3=b 7 p=a; 8 p1=a; 9 p2=b;10 p3=a; 第3、4、7、8行是正确的;第5行是错误的,第6行是正确的,第10行是错误的,因为const在’*’后面,表示是来修饰指针变量本身,因此在声明时必须进行初始化,并且在后面不能再指向其它的变量.#includestdio.hint main(void){ const int a=3; int *pa=a; *pa=4; printf("%d\n",*pa); printf("%d\n",a); return 0;}编译结果:e:\c++\test\test.c(6) : warning C4090: ’initializing’ : different ’const’ qualifiers输出结果是: 44从这里可以看出a的值被修改了,在C语言中用const去修饰整形变量a,即a的值是不可变的,不能显示地通过赋值语句去改变a的值,但是不代表在程序中不能通过其它方法来修改这个值。总结:(1)在C语言中用const去修饰一个变量,表示这个变量是只读的,不可通过显式的调用a去修改a的值,并且此时a仍然是一个变 量,不能等同于常量;(2)要注意const在声明变量时所处的位置,位置不同,在意义上可能会有很大的不同。如果const在’*’左边,则表示指针指向的变量的值不可变;如果const在’*’右边,则表示指针的值是不可变的;
关键字const的含义及其作用
const是一个修饰符,被修饰的对象或者变量是不可修改的,也就是说const可读不可改,const在谁的后面const就修饰谁,如果const在最前面,那么将const后移一位即可,二者是等效的。 const有以下这几个作用:(1)如果我们想要阻止一个变量被改变,那么我们就可以使用const关键字来修饰它,由于被const修饰的对象或者变量是可读不可写的,因此我们在使用const的使用要对所修饰的对象或者变量进行初始化,否则以后没有机会再改变他的值。(2)对于指针来说,const可以修饰指针本身,也可以修饰指针所指的数据,也可以修饰两者。(3)在对一个函数进行声明的时候,可以使用const对形参进行修饰,表明它是一个输入参数,在函数的内部不可写。(4)对于类的成员函数,如果被const修饰,表明它是一个常函数,不能修改类的成员变量。(5)对于类的成员函数,有时候必须指定其返回值类型是const,这样使得该函数的返回值不是“左值”。
const int a; int const a; const int *a; int * const a; int const * a const; 之间的区别
const int a; int const a; 这两个写法是等同的,表示a是一个int常量。const int *a; 表示a是一个指针,可以任意指向int常量或者int变量,它总是把它所指向的目标当作一个int常量。也可以写成int const* a;含义相同。int * const a; 表示a是一个指针常量,初始化的时候必须固定指向一个int变量,之后就不能再指向别的地方了。int const * a const;这个写法没有,倒是可以写成int const * const a;表示a是一个指针常量,初始化的时候必须固定指向一个int常量或者int变量,之后就不能再指向别的地方了,它总是把它所指向的目标当作一个int常量。也可以写成const int* const a;含义相同。
更多文章:
vs2017安装教程(安装visual studio2017时老出问题)
2024年7月10日 02:23
剪切快捷键ctrl加什么(剪切快捷键是什么 剪切快捷键Ctrl+X)
2024年5月24日 07:10
部落冲突破解版(部落冲突破解版到底有没有,如果有是不是真的啊)
2024年5月6日 20:18
怎样登陆手机定位官方网站怎样登陆精确手机定位网站怎样登陆手机定位精确网怎样实现精确手机定位?手机定位网
2024年6月21日 13:40
超级浏览器下载安装(电脑怎么下载浏览器 电脑下载浏览器的方法)
2024年8月24日 22:05
烧饼修改器官网(有哪些不用root就可以使用的修改器操作流程是什么)
2024年7月23日 19:30