const修饰符相关

const修饰符表明一个变量是常量,大致分为三类:常量数组(等同于常量指针),常量指针,指向常量的指针。

  • 常量数组中数据都是不可修改的,任何试图修改常量数组中的数据的操作都会报错。

  • 常量指针,指针本身是常量,是不可以修改它的指向的,但是可以修改它指向变量的数值,它的修饰符一般放在中间,形如:int* const p

  • 指向常量的指针,指针用于指向常量,因为常量具有不可修改的特点,所以任何希望通过普通指针来指向常量然后来修改常量的行为是非常恶劣的。所以如果想指向常量,就要通过指向常量的指针,形如:const int *p

常量指针和指向常量指针的辨析

常量指针只能指向对应类型的非常量的变量,可以通过解引用来修改它指向数据的值,但是不可以修改它的指向。注意:指向const的指针中*必须放在类型说明符后面,形如int *const a;

 #include <stdio.h>
 ​
 int main (void) {
  int a = 4;
  int b = 5;
  const int c = 6;
  int* const d = &a;
 //   d = &b; 这个是会报错的因为d是const指针不可以指向其他地方
  printf("d = %d\n", *d);
  *d += 10;
  printf("d = %d\n", *d);
  return 0;
 }
 ​
 /**
 d = 4
 d = 14
 **/

指向常量的指针,就像它的定义一样,默认来看它使用来指向常量的,因为常量的不可修改性,我们不希望通过普通的指针来指向常量来达到修改常量的效果,所以我们使用指向常量的指针。

指向常量的指针不能通过它来修改被指向的对象,只能通过它来访问对应常量的内容,而且因为指针本身并非常量,他自身也可以被修改指向其他对象。而且由于语言的宽泛性,指向常量的指针也可以指向非常量,这样我们也不一定通过它来修改被指向的非常量。

 #include <stdio.h>
 ​
 int main (void) {
  int a = 4;
  int b = 5;
  const int c = 6;
 ​
  // 常量指针可以指向可以指向非常量和常量,但是都可以访问但是不可以修改
  const int *d = &c;
  printf("d = %d\n", *d);
  // *d += 1;这个会报错
  d = &a;
  printf("d = %d\n", *d);
  // *d += 2; 这个也会报错
 ​
  // 普通指针不可以指向常量!企图通过这种方式修改常量的行为时未定义的,一般不可使用
  int *e = &c;
  printf("e = %d\n", *e);
  *e += 2;
  printf("e = %d", *e);
  return 0;
 }
 ​
 /**
  d = 6
  d = 4
  e = 6
  e = 8
 **/

const修饰符相关的更多相关文章

  1. C/C++ 中 const 修饰符用法总结

    C/C++ 中 const 修饰符用法总结 在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家 ...

  2. [原创] 基础中的基础(二):C/C++ 中 const 修饰符用法总结

    在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家梳理一下知识,给大家一点点帮助.作者是菜鸟一 ...

  3. 转载----C/C++ 中 const 修饰符用法总结

    感谢原创作者,写的好详细.不忍错过,所以转载过来了... 原文地址: https://www.cnblogs.com/icemoon1987/p/3320326.html 在这篇文章中,我总结了一些C ...

  4. C++中 容易忽视的const 修饰符

    C++可以用const定义常量,也可以用#define定义常量,但是前者比后者有更多的有点: (1)const常量有数据类型,而宏常量没有数据类型.编译器可以对const进行类型安全检查,而后者只进行 ...

  5. [Reprint]C++函数前和函数后加const修饰符区别

    c++中关于const的用法有很多,const既可以修饰变量,也可以函数,不同的环境下,是有不同的含义.今天来讲讲const加在函数前和函数后面的区别.比如: 01 #include<iostr ...

  6. C++函数前和函数后加const修饰符区别

    class Test(){ public: Test(){} const int foo(int a); const int foo(int a) const; }; 一.概念 当const在函数名前 ...

  7. [C++]const修饰符

    Date: 2014-1-1 Summary: const 修饰符笔记 Contents: 1.const 修饰符 声明一个常量数据类型 , 在编译时就确定数据类型 2.const 与 指针 一般情况 ...

  8. const修饰符与函数

    一.用const修饰函数的参数 函数参数类型前加const指明该参数为常量,在函数内部不可改变. void func(const int x) { //x不可以在内部进行赋值等操作. } 注:当参数为 ...

  9. const修饰符限定的常量

    类型前加const修饰符限定变量为只读,称为常量,定义时必须初始化,且初始化后编译器不允许再修改常量的值. 一.常量的定义 const在类型前面 const int value: //value是co ...

随机推荐

  1. A. Vitaly and Strings

    Vitaly is a diligent student who never missed a lesson in his five years of studying in the universi ...

  2. http post请求数组参数写法

    1.json形式 body如下(注意是中括号): [ *, *, * ] postman: fiddler: 2.x-www-form-urlencoded postman: fiddler: 3.服 ...

  3. css整理之-----------选择器

    背景 在20年初时总感觉自己的css 不够用,想把css 相关的东西整理下,去年一整年都比较忙,忙着就到2021了,今天趁着有点时间,先从选择器开始吧. 听说图片可以提升颜值.... 选择器 CSS选 ...

  4. 833A The Meaningless Game

    A. The Meaningless Game time limit per test 1 second memory limit per test 256 megabytes input stand ...

  5. Leetcode(1)-两数之和

    给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15], target ...

  6. HDU 4280 Island Transport(HLPP板子)题解

    题意: 求最大流 思路: \(1e5\)条边,偷了一个超长的\(HLPP\)板子.复杂度\(n^2 \sqrt{m}\).但通常在随机情况下并没有isap快. 板子: template<clas ...

  7. Sentry React SourceMaps All In One

    Sentry React SourceMaps All In One React https://docs.sentry.io/platforms/javascript/guides/react/ h ...

  8. SwiftUI All In One

    SwiftUI All In One SwiftUI SwiftUI is an innovative, exceptionally simple way to build user interfac ...

  9. 微信小程序-生命周期图解

    微信小程序-生命周期图解 小程序生命周期 App 生命周期 https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.htm ...

  10. css effect all in one

    css effect all in one CSS 特效汇总 / 前端特效汇总 图片滑动对比 https://www.fika.io/ https://chrome.google.com/websto ...