ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

C语言 const 修饰函数返回值 - C语言零基础入门教程

2021-09-08 10:03:11  阅读:124  来源: 互联网

标签:语言 const 函数 int 入门教程 C语言 修饰 指针


目录

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

一.const 简介

const 是 constant 的缩写,“恒定不变”的意思。被 const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。所以很多 C++ 程序设计书籍建议:“Use const whenever you need”。

1.const 修饰变量

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 const 修饰函数
//@Time:2021/07/04 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/

#include <stdio.h>

int main() {
    const int a = 20 ;
    printf("a = %d\n",a);
    a = 200 ;
    printf("a = %d\n",a);
    return 0;
}

/*
 输出:

 Compilation Failed
 error: assignment of read-only variable 'a'
     6 |     a = 200 ;
       |     ~~^~~~~
 */

用 const 定义的变量的值是不允许改变的,即不允许给它重新赋值,即使是赋相同的值也不可以。并且 const 修饰的变量在定义的时候就给它赋初值,否则报错

error: uninitialized 'const ' [-fpermissive]

详细解释可以直接跳转:const 修饰变量;

2.const 修饰指针

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 const 修饰函数
//@Time:2021/07/04 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/


//以下两者等价,表示 *p 不可变。*p 表示的是指针变量 p 所指向的内存单元里面的内容,此时这个内容不可变;
const int *p
int const *p


//此时 const 修饰的是 p,所以 p 中存放的内存单元的地址不可变,而内存单元中的内容可变。即 p 的指向不可变,p 所指向的内存单元的内容可变;
int * const p


//*p 和 p 都被修饰了,那么 p 中存放的内存单元的地址和内存单元中的内容都不可变;
const int * const p

详细解释可以直接跳转:const 修饰指针;

二.const 修饰在函数名前面

const 在函数名前面的时候修饰的是函数返回值;在函数名后面表示是 C++ 常成员函数,该函数不能修改对象内的任何成员,只能发生读操作,不能发生写操作。

const char * GetString(void);
const int    GetInt(void);
const float  GetFloat(void);
const double GetDdouble(void);

如果给以“指针传递”方式的函数返回值加 const 修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加 const 修饰的同类型指针;

const char * GetString(void);

//如下语句将出现编译错误:
//char *str = GetString();

//正确的用法是
const char  *str = GetString();

如果函数返回值采用“值传递方式”,由于函数会把返回值复制到外部临时的存储单元中,加 const 修饰没有任何价值。

int GetInt(void);

const int GetInt(void);

以上两个函数都是都是独立存在的,并非同一个函数;

三.const 修饰在函数名后面

const 在函数名前面的时候修饰的是函数返回值;在函数名后面表示是 C++ 常成员函数,该函数不能修改对象内的任何成员,只能发生读操作,不能发生写操作。

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 const 修饰函数
//@Time:2021/07/04 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/

class People
{
 public:
    int talk(void);
    int eat(void) const; // const 成员函数
 private:
    int m_age;

};
int People::eat(void) const
{
    ++m_age; // 编译错误,企图修改数据成员m_num
    talk();  // 编译错误,企图调用非const函数
    return    m_age;
}
  • const 对象只能访问 const 成员函数,而非 const 对象可以访问任意的成员函数,包括 const 成员函数.
  • const 对象的成员是不可修改的,然而 const 对象通过指针维护的对象却是可以修改的.
  • const 成员函数不可以修改对象的数据,不管对象是否具有 const 性质.它在编译时,以是否修改成员数据为依据,进行检查.
  • 然而加上 mutable 修饰符的数据成员,对于任何情况下通过任何手段都可修改,自然此时的 const 成员函数是可以修改它的

四.猜你喜欢

  1. C 语言 数组下标越界和内存溢出区别
  2. C 语言 指针声明和定义
  3. C 语言 指针 p++ / p–
  4. C 语言 p++/§++/_(p++)/_p++
  5. C 语言 使用指针遍历数组
  6. C 语言 指针和数组区别
  7. C 语言 指针数组和数组指针区别
  8. C 语言 空指针 NULL
  9. C 语言 void 指针
  10. C 语言 野指针
  11. C 语言 函数值传递和址传递
  12. C 语言 函数缺省参数
  13. C 语言 函数不定长参数
  14. C 语言 函数指针
  15. C 语言 指针函数
  16. C 语言 回调函数 callback
  17. C 语言 typedef
  18. C 语言 define 定义常量
  19. C 语言 define 防止头文件重复包含
  20. C 语言 #pragma once
  21. C 语言 #include <> 与 #include “” 区别
  22. C 语言 const 修饰变量
  23. C 语言 const 修饰指针
  24. C语言 const 修饰函数

未经允许不得转载:猿说编程 » C 语言 const 修饰函数返回值

本文由博客 - 猿说编程 猿说编程 发布!

标签:语言,const,函数,int,入门教程,C语言,修饰,指针
来源: https://www.cnblogs.com/shuopython/p/15241343.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有