|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 moc 于 2018-11-25 22:54 编辑
1、const 的基本用法
指针变量和他指向的内存空间的变量是两个不同的概念
看const是放在*的左边还是右边,放在*的左边则修饰指针,右边则修饰指针所指向的内存空间、
- #include "stdlib.h"
- #include "stdio.h"
- #include "string.h"
- int getKeyValue(const char * keyvaluebuf, char *keybuf, char *valuebuf, int *valuelen)
- {
- keyvaluebuf++; //修饰内存,指针可以变
- // keyvaluebuf[0] = 'a'; //修饰指针,内存可以变
- return 0;
- }
- void main()
- {
- const int a = 10;
- int const b = 11;
- int fa[10];
- char ff = 'a';
- //const char *c; //const + *p 修饰内存,内存的值不可变,c是指针变量,可变
- int * const d = fa; // * + const p 修饰指针,指针不可变,即常量指针
- const int *const e = fa; //指针,内存空间都不能变
- system("pause");
- }
复制代码
2、const char* 和 char *
const char*是指向常量的指针,而不是指针本身为常量,可以不被初始化.该指针可以指向常量也可以指向变量,只是从该指针的角度而言,它所指向的是常量.也即通过该指针不能修改它所指向的数据.
1.const char* 转 char *
const char*是不能直接赋值到char*的,这样编译都不能通过,理由:假如可以的话,那么通过char*就可以修改const char指向的内容了,这是不允许的.所以char*要另外开辟新的空间。
- #include <iostream>
- using namespace std;
- void main(){
- const char* cpc="abcde";
- char* pc=new char[100];
- strcpy(pc,cpc);
- cout<<pc<<endl;
- }
复制代码
2.char* 转const char *
可以直接赋值。
- const char* cpc;
- char* pc="abcde";
- cpc=pc;
复制代码
-------------------------------------------------------------------------------------------------------------------------
3、const修饰函数参数
const修饰普通类型函数参数,在函数体内是不能改变i的值的,但是没有任何实际意义。
const修饰的函数参数是指针时,代表在函数体内不能修改该指针所指的内容,起到保护作用,在字符串复制的函数中保证不修改源字符串的情况下,实现字符串的复制。
const指针可以接收非const和const指针,而非const指针只能接收非const指针。
- void fun(const int i) {
- //i = 10; // 不能改变i的值
- }
- void fun(const char *src, char* const des) {
- src++;
- //(*src)++; //保护指针指向的内存空间的值不被改变
- //des++; //保护指针的指向关系不发生改变
- (*des)++;
- }
复制代码 4、const修饰成员函数
在类中将成员函数修饰为const表明在该函数体内,不能修改对象的数据成员而且不能调用非const函数。为什么不能调用非const函数?因为非const函数可能修改数据成员,const成员函数是不能修改数据成员的,所以在const成员函数内只能调用const函数。
const+& ==> const修饰函数,不能返回引用取做左值,改变数据。
- class A{
- private:
- int i;
- public:
- void set(int n ){ //set函数需要设置i的值,所以不能声明为const
- i = n;
- }
- int get() const{ //get函数返回i的值,不需要对i进行修改,则可以用const修饰。防止在函数体内对i进行修改。
- return i;
- }
- int &ge2t() const{ //get函数返回i的值,不需要对i进行修改,则可以用const修饰。防止在函数体内对i进行修改。
- //return i; // error const修饰函数,不能返回引用取做左值,改变数据
- }
- };
复制代码 |
|