目录

  • 一.const 简介
  • 二.const 修饰指针
    • 1.const int *p
    • 2.int const *p
    • 3.int * const p
    • 4.const int * const p
  • 三.猜你喜欢

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

一.const 简介

const 是 constant 的缩写,意思是“恒定不变的”!它是定义只读变量或者常变量的关键字。const 定义的是变量,但又相当于常量;说它定义的是常量,但又有变量的属性,所以也叫常变量。

const 定义的变量的值是不允许改变的,即不允许给它重新赋值,即使是赋相同的值也不可以。所以说它定义的是只读变量。这也就意味着必须在定义的时候就给它赋初值。

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 const 修饰指针
//@Time:2021/07/02 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 Failederror: assignment of read-only variable 'a'6 |     a = 200 ;|     ~~^~~~~*/

二.const 修饰指针

首先应该回忆一下指针内容:

int *p = 5;/*p:指针的内存地址,类似门牌号,十六进制表示:0xffff*p:指针的内存地址对应的值,类似门牌号对应里面住的人,即5*/

1.const int *p

当把 const 放最前面的时候,它修饰的就是 *p,那么 *p 就不可变。*p 表示的是指针变量 p 所指向的内存单元里面的内容,此时这个内容不可变。其他的都可变,如 p 中存放的是指向的内存单元的地址,这个地址可变,即 p 的指向可变。但指向谁,谁的内容就不可变。

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 const 修饰指针
//@Time:2021/07/02 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/# include <stdio.h>int main(void)
{int a = 10;const int *p = &a;int * q = &a;*q = 20;printf("a = %d\n", a);a = 30;printf("a = %d\n", a);//const int *p = &a; //表示 *p 值不能发生改变否则 error: assignment of read-only location '* p'//*p = 30;  //这么写就是错的return 0;
}/*输出:a = 20
a = 30*/

2.int const *p

constint 可以互换位置,所以 int const *p 和 const int *p 二者是等价的;

3.int * const p

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

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 const 修饰指针
//@Time:2021/07/02 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/# include <stdio.h>int main(void)
{const char *p = "hello"; //*p 不可以改变 ,p地址可以改变char* const q = "bbb"; // q地址不能改变p++;   //ok//q++; //这句是错误的. error: increment of read-only variable 'q'printf("%s\n",p);printf("%s\n",q);return 0;
}/*输出:ellobbb*/

灵魂拷问:知道为什么输出是 “ello” 而不是 “hello” ??

4.const int * const p

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

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 const 修饰指针
//@Time:2021/07/02 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/# include <stdio.h>int main(void)
{const char * const p = "hello"; //*p 不可以改变 ,p地址不可以改变//*p++;   //这句是错误的. error: increment of read-only variable 'p'//p++;    //这句是错误的. error: increment of read-only variable 'p'printf("%s\n",p);return 0;
}

综上所述,使用 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 修饰指针

未经允许不得转载:猿说编程 » C 语言 const 修饰指针

C语言 const 修饰指针 - C语言零基础入门教程相关推荐

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

    目录 一.const 简介 1.const 修饰变量 2.const 修饰指针 二.const 修饰在函数名前面 三.const 修饰在函数名后面 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : ...

  2. C语言 const 修饰函数参数 - C语言零基础入门教程

    C语言 const 修饰函数参数 - C语言零基础入门教程 目录 一.const 简介 1.const 修饰变量 2.const 修饰指针 3.const 修饰在函数名前面 4.const 修饰在函数 ...

  3. C语言 const 和 define 区别 - C语言零基础入门教程

    目录 一.const 使用 1.const 修饰变量 2.const 修饰指针 3.const 修饰在函数名前面 4.const 修饰在函数名后面 5.const 修饰函数参数 二.define 使用 ...

  4. C语言 ##__VA_ARGS__ - C语言零基础入门教程

    目录 一.##__VA_ARGS__原理 二.##__VA_ARGS__使用 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.##__ ...

  5. C语言 __VA_ARGS__ - C语言零基础入门教程

    目录 一.__VA_ARGS__简介 二.__VA_ARGS__使用 1.__VA_ARGS__宏输出字符串常量 2.__VA_ARGS__宏输出可变参数 三.__VA_ARGS__缺点 1.仅仅只支 ...

  6. C语言 ##运算符 - C语言零基础入门教程

    目录 一.##运算符简介 二.##运算符使用 1.##运算符常规使用 2.##运算符定义结构体 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础 ...

  7. C语言 __cplusplus - C语言零基础入门教程

    目录 一.__cplusplus 简介 二.__cplusplus 使用 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.__cplu ...

  8. C语言 #运算符 - C语言零基础入门教程

    目录 一.#运算符简介 二.#运算符使用 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.#运算符简介 在 C 语言关于 define ...

  9. C语言 extern “C” - C语言零基础入门教程

    目录 一.__cplusplus 简介 二.__cplusplus 使用 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.__cplu ...

最新文章

  1. SpringCloud_项目搭建以及Eureka
  2. AWS — AWS 上的 5G 网络及 MEC 边缘计算商业案例
  3. AI公开课:19.04.03周明—MSRA副院长《NLP的进步如何改变搜索的体验》课堂笔记以及个人感悟
  4. java web 截图_如何以Java实现网页截图技术
  5. 在过滤器中设置一个应用范围内的路径
  6. PHP从零开始--基础篇
  7. poj 3469(网络流模版)
  8. xampp mysql访问拒绝_liunx Centos7 安装xampp
  9. 如何掌握openGauss数据库核心技术?秘诀一:拿捏SQL引擎(3)
  10. 数据结构之线索化二叉树
  11. 用汇编的眼光看C++(之特殊函数)
  12. mysql lvs 读写分离_mysql高可用架构方案之二(keepalived+lvs+读写分离+负载均衡)
  13. 腾讯优测优分享 | 双卡双待-工程师难言的痛
  14. “缺少winload.efi”的解决办法“:Windows Boot Manager更改读取启动信息路径
  15. crt导出服务器文件,CRT中将服务器中生成的awr报告用会话日志提取到本地
  16. tornado线程阻塞的解决
  17. valgrind内存泄漏检测
  18. php开发地图导航,百度地图API使用方法详解
  19. 基于android 10的国产手机,魅友有福了,基于Android 10的Flyme来了,10款旧机型可申请...
  20. xp计算机管理员桌面文件没有权限,xp右键没有以管理员身份运行怎么办_常见问题解析,xp...

热门文章

  1. 【实践案例】Databricks 数据洞察在美的暖通与楼宇的应用实践
  2. 独家下载!小程序Serverless云上开发一站到底
  3. 蚂蚁金服生产级 Raft 算法库存储模块剖析 | SOFAJRaft 实现原理
  4. 深度学习为图片人物换装【python代码教程】
  5. 【视频点播最佳实践】使用OSS SDK上传视频到点播
  6. 精打细算使用MaxCompute搭建数仓
  7. 从能用到好用,GIS信创如何做到行稳致远?
  8. 重磅!大数据知识总结和调参技巧开放下载了
  9. CSDN鸿蒙社区福利:HarmonyOS Beta 版内测资格申请
  10. 浪潮云发布全新“1231”业务战略,打造“一朵分布式云”