当前位置: 首页 > news >正文

关键字 const

目录

一、符号常量与常变量

二、const的用法

2.1 const常用方法

2.2 const用于指针

2.2.1 p指针所指的对象值不能改变,但是p指针的指向可以改变

2.2.2 常指针p的指向不能改变,但是所指的对象的值可以改变

2.2.3 p所指对象的指向以及对象的值都不可改变

2.3 const用于形参

2.4 const用于结构体



一、符号常量与常变量

#define PI 3.14   //符号常量

const float pi=3.14;  //常变量

符号常量:预处理时对字符进行替换,不占用存储空间

常变量:占用存储空间,但是值不可变。

二、const的用法

2.1 const常用方法

count_num内容不能被修改

const int  count_num =23;
等价于int const  count_num =23; 

2.2 const用于指针

判别方法:

const在 * 的左边,所指对象值是常量; 常量指针

const在 * 的右边,所指的对象是常量。 指针常量

2.2.1 p指针所指的对象值不能改变,但是p指针的指向可以改变

const int* p; 
int const* p;1 int b = 5;
2 int c = 3;
3 const int *p=&b;
4 *p=6;    //错误,不能通过指针修改所指向的值;
5 p=&c;    //正确,可以修改指针的值 

2.2.2 常指针p的指向不能改变,但是所指的对象的值可以改变

int * const p; 1 int b = 5;
2 int c = 3;
3 int *const p = &b;
4 *p = 6;  //正确,可以修改指针所值向的值
5 p =&c;   //错误,不可以修改指针的值

2.2.3 p所指对象的指向以及对象的值都不可改变

const int * const p;

2.3 const用于形参

void foo(const int * p)

const用于形参时说明了形参在函数内部不会被改变。这种形式通常用于数组形式的参数中模拟传值调用。这也是const最有用之处,限定函数的形参,这样该函数将不会修改实参指针所指向的数据。这里需要注意得的是,是函数不应该去修改而不是不能修改。

2.4 const用于结构体

typedef struct student {char name[32];int age;
} Stu_st, *Stu_pst;struct student取个别名为Stu_st,将struct student *取个别名Stu_pst:
①struct student stu1 等价于 Stu_st stu1
②struct student *stu2 等价于 Stu_pst stu2 等价于 Stu_st *stu2

大多数人认为第一个中const修饰的是stu3指向的对象,第二个中const修饰的是stu4这个指针。 其实编译器来说只认为Stu_pst是一个类型名,所以两个均是表示为修饰的是stu3,stu4这个指针

const Stu_pst stu3;
Stu_pst const stu4;
#include<stdio.h>typedef struct student {char name[32];int age;
}Stu_st, *Stu_pst;int main() {const Stu_pst stu3;//定义个常量指针Stu_pst const stu4;//下面两条语句可以编译通过就证明//修饰的是stu3,stu4这个指针,并非stu3,stu4指向的对象。stu3->age = 22;stu4->age = 23;//当指针发生改变时,编译就会报错的stu4 = stu3;return 0;
}

 

http://www.lryc.cn/news/40690.html

相关文章:

  • MybatisPlus------MyBatisX插件:快速生成代码以及快速生成CRUD(十二)
  • Leetcode138. 复制带随机指针的链表
  • python并发编程多线程
  • 使用Maven实现Servlet程序
  • 百度的文心一言 ,没有想像中那么差
  • 文心一言发布的个人看法
  • 【C5】111
  • 静态成员,友元函数
  • 数学分析课程笔记(张平):函数
  • spring事务 只读此文
  • 真实的软件测试日常工作是咋样的?
  • 【UML】软件需求说明书
  • 面试官:html里面哪个元素可以让文字换行展示
  • XGBoost和LightGBM时间序列预测对比
  • JVM高频面试题
  • Windows环境下实现设计模式——状态模式(JAVA版)
  • 【总结】多个条件排序(pii/struct/bool)
  • 基于stm32mp157 linux开发板ARM裸机开发教程Cortex-A7 开发环境搭建(连载中)
  • 最适合游戏开发的语言是什么?
  • C语言刷题(7)(字符串旋转问题)——“C”
  • 有趣且重要的JS知识合集(18)浏览器实现前端录音功能
  • 面试官:聊聊你知道的跨域解决方案
  • SpringCloud五大核心组件
  • Verilog HDL语言入门(二)
  • Simpleperf详细使用
  • 【算法基础】二分图(染色法 匈牙利算法)
  • Caputo 分数阶微分方程-慢扩散方程初边值问题基于L1 逼近的空间二阶方法及其Matlab程序实现
  • I.MX6ULL_Linux_驱动篇(29) GPIO驱动
  • jupyter的安装和使用
  • Springboot新手开发 Cloud篇