鱼C论坛

 找回密码
 立即注册
查看: 2820|回复: 0

[学习笔记] 008-关键字const

[复制链接]
发表于 2018-8-9 16:57:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 moc 于 2018-11-25 22:54 编辑

1、const 的基本用法
     指针变量和他指向的内存空间的变量是两个不同的概念
     看const是放在*的左边还是右边,放在*的左边则修饰指针,右边则修饰指针所指向的内存空间、
  1. #include "stdlib.h"
  2. #include "stdio.h"
  3. #include "string.h"

  4. int getKeyValue(const char * keyvaluebuf, char *keybuf, char *valuebuf, int *valuelen)
  5. {
  6.         keyvaluebuf++;  //修饰内存,指针可以变
  7.         // keyvaluebuf[0] = 'a';  //修饰指针,内存可以变
  8.         return 0;
  9. }

  10. void main()
  11. {
  12.         const int a = 10;
  13.         int const b = 11;
  14.         int fa[10];
  15.         char ff = 'a';

  16.         //const char *c;        //const + *p 修饰内存,内存的值不可变,c是指针变量,可变
  17.         int * const d = fa;     // * + const p 修饰指针,指针不可变,即常量指针
  18.         const int *const e = fa;   //指针,内存空间都不能变

  19.         system("pause");
  20. }
复制代码

2、const char* 和 char *
        const char*是指向常量的指针,而不是指针本身为常量,可以不被初始化.该指针可以指向常量也可以指向变量,只是从该指针的角度而言,它所指向的是常量.也即通过该指针不能修改它所指向的数据.
1.const char* 转 char *
const char*是不能直接赋值到char*的,这样编译都不能通过,理由:假如可以的话,那么通过char*就可以修改const char指向的内容了,这是不允许的.所以char*要另外开辟新的空间。
  1. #include <iostream>
  2. using namespace std;
  3. void main(){
  4. const char* cpc="abcde";
  5. char* pc=new char[100];
  6. strcpy(pc,cpc);
  7. cout<<pc<<endl;
  8. }
复制代码

2.char* 转const  char *
  可以直接赋值。
  1. const char* cpc;
  2. char* pc="abcde";
  3. cpc=pc;
复制代码

-------------------------------------------------------------------------------------------------------------------------
3、const修饰函数参数
const修饰普通类型函数参数,在函数体内是不能改变i的值的,但是没有任何实际意义。
const修饰的函数参数是指针时,代表在函数体内不能修改该指针所指的内容,起到保护作用,在字符串复制的函数中保证不修改源字符串的情况下,实现字符串的复制。
const指针可以接收非const和const指针,而非const指针只能接收非const指针。
  1. void fun(const int i) {  
  2.     //i = 10;  // 不能改变i的值
  3. }
  4. void fun(const char *src, char* const des) {  
  5.     src++;
  6.     //(*src)++;  //保护指针指向的内存空间的值不被改变
  7.     //des++;     //保护指针的指向关系不发生改变
  8.     (*des)++;
  9. }
复制代码
4、const修饰成员函数
在类中将成员函数修饰为const表明在该函数体内,不能修改对象的数据成员而且不能调用非const函数。为什么不能调用非const函数?因为非const函数可能修改数据成员,const成员函数是不能修改数据成员的,所以在const成员函数内只能调用const函数。
const+&  ==>  const修饰函数,不能返回引用取做左值,改变数据。
  1. class A{  
  2. private:  
  3.             int i;  
  4. public:  
  5.     void set(int n  ){    //set函数需要设置i的值,所以不能声明为const  
  6.         i = n;  
  7.     }  
  8.     int get() const{    //get函数返回i的值,不需要对i进行修改,则可以用const修饰。防止在函数体内对i进行修改。  
  9.         return i;  
  10.     }  
  11.     int &ge2t() const{    //get函数返回i的值,不需要对i进行修改,则可以用const修饰。防止在函数体内对i进行修改。  
  12.         //return i;   //   error  const修饰函数,不能返回引用取做左值,改变数据
  13.     }  
  14. };
复制代码

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-22 00:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表