008-关键字const
本帖最后由 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 = 'a';//修饰指针,内存可以变
return 0;
}
void main()
{
const int a = 10;
int const b = 11;
int fa;
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;
strcpy(pc,cpc);
cout<<pc<<endl;
}
2.char* 转constchar *
可以直接赋值。
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; // errorconst修饰函数,不能返回引用取做左值,改变数据
}
};
页:
[1]