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. 牛客练习赛63 C.牛牛的揠苗助长

    题意:有一个长度为\(n\)的数组,从第一天开始,第\(i\)天可以使\(i\)位置上的数\(+1\),当\(i=n\)时,下次从\(i=1\)再开始,另外,在每天结束时,你可以使任意一个位置上的数\ ...

  2. 命令提示符CMD下切换用户

    工作中遇到需要在windows环境中命令提示符下切换为Guest用户执行程序,类似Linux中的su操作. 操作步骤如下:1.用管理员权限运行cmd.2:执行命令:runas /user:userna ...

  3. 鸟哥的linux私房菜——第六章学习(Linux文件与目录管理)

    ******************第六章学习****************** 1.[文件与目录管理] 在所有目录下面都会存在的两个目录,分别是 "." 与 "..& ...

  4. CodeForces - 803C Maximal GCD 【构造】

    You are given positive integer number n. You should create such strictly increasing sequence of k po ...

  5. springboot demo(一)快速开始

    快速入门 maven构建项目 1.访问http://start.spring.io/ 2.选择构建工具Maven Project.Spring Boot版本2.26以及一些工程基本信息,点击" ...

  6. Keras 报错: Error when checking target: expected dense_4...

    笔者此处是一个回归任务, 最后一层是: ... pred = Dense(1)(x) 在最后一个Dense层前加上x = Flatten()(x)即可.

  7. CSS 水平滚动条 bug & width auto increase bug

    CSS 水平滚动条 bug css overflow & width auto increase bug 问题排查方式 删除可疑的模块,一步步找到问题的原因,定位问题所在 寻找可能会导致 wi ...

  8. you don't know github

    you don't know GitHub <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  9. CSS Shapes

    CSS Shapes shape-outside & shape-image-threshold <img class="element" src="ima ...

  10. Flutter: 判断是Android还是Ios

    /// 在ui中使用下面的这个判断 Theme.of(context).platform == TargetPlatform.android /// 而不是 import 'dart:io' Plat ...