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. AtCoder Beginner Contest 183 E - Queen on Grid (DP)

    题意:有一个\(n\)x\(m\)的棋盘,你需要从\((1,1)\)走到\((n,m)\),每次可以向右,右下,下走任意个单位,\(.\)表示可以走,#表示一堵墙,不能通过,问从\((1,1)\)走\ ...

  2. Codeforces Round #682 (Div. 2) C. Engineer Artem (构造)

    题意:给你一个\(n\)x\(m\)的矩阵,你可以任意位置的元素+1,只能加一次,问你如何使得任意位置的元素不等于它四周的值.输出操作后的矩阵. 题解:构造,矩阵中某两个下标的和的奇偶性一定和四周的都 ...

  3. 01.原生态jdbc程序中问题总结

    1.数据库启动包配置到工程目录中(mysql5.1) mysql-connector-java-5.1.7-bin.jar 2.jdbc原生态操作数据库(程序) 操作mysql数据库 1 packag ...

  4. CF1463-B. Find The Array

    题意: 给出一个由n个数组成的数组a,这个数组的元素和为S,要求你找出一个由n个数字组成数组b,这个数组满足: 数组中的每个数可以将他两边的数字整除或者被他两边的数字整除 数组b中每个位置的数字减去数 ...

  5. [Python] Pandas的delete、drop函数的用法

    目录 drop函数 Axis(轴)含义 drop用法实验 delete函数 drop函数 DataFrame.drop(labels=None, axis=0, index=None, columns ...

  6. LINUX - Libevent

    参考: https://dulishu.top/libevent-event-loop/

  7. Microsoft Office Excel 2010 常用操作

    1.添加下拉菜单 (1)选中单元格 (2)数据--数据有效性--数据有效性 (3)在"有效性条件"的"允许"处,选择"序列",并在新出现的& ...

  8. Virtualbox 安装centos7虚拟机

    Virtualbox 安装centos7虚拟机 一,下载centos7 下载地址:https://mirrors.tuna.tsinghua.edu.cn/centos/7.9.2009/isos/x ...

  9. bash variables plus operator All In One

    bash variables plus operator All In One Errors missing pass params #!/usr/bin/env bash # echo emoji ...

  10. 如何在没有显示器的情况下,查看 Raspberry Pi 3的 IP 信息(Raspberry Pi 3 ,IP Address)

    1. 如何在没有显示器的情况下,查看 Raspberry Pi 3的 IP 信息(Raspberry Pi 3 ,IP Address) 1 IP Address Any device connect ...