c语言中声明常量的两种方式

const   int   value
int const value

如果要声明常量的指针,即指向常量的指针,则可以参考上面的常量声明修改一下

const   int   *ptr
int const *ptr

把*ptr看成一个整体,那么*ptr中的ptr就是指向常量的指针了。顾名思义,指向常量的指针,那么就不可以通过这个指针去修改这个值了。

#include <stdio.h>

int main(){

	int val = 123;
int const *ptr = &val; *ptr = 111; return 0;
} 会报错:
error: read-only variable is not assignable
*ptr = 111;
~~~~ ^
1 error generated.

但仍可以通过其他方式修改这个量的值。例如

#include <stdio.h>

int main(){

	int val = 123;
int const *ptr = &val;
val = 222; printf("%d\n", *ptr); return 0;
}
输出:222

常量指针的意义就是不可以通过这个指针去修改它所指向的值

指针常量

可以理解为先定义一个常量,并且这个常量为指针类型。

int val = 123;
int * const ptr = & val;

ptr只是一个常量,它的值是一个固定的内存地址。

#include <stdio.h>

int main(){

	char *message = "hello, world\n";

	//此处ptr是"hello,world\n"的内存地址
char * const ptr = message;
printf("%s\n", ptr); //就算修改了message的值,也没有修改ptr的值,ptr依旧指向 "hello, world\n"
message = "hello, maomao\n";
printf("%s\n", ptr); return 0;
} 输出
hello, world hello, world

指向常量的常量指针

char const  *  const ptr;

该指针为常量,同时不可以通过该指针修改指向的值。

C和指针 第三章 指针常量与常量指针的更多相关文章

  1. C和指针 第三章--数据

    简要概述: <C和指针>第三章对数据进行了描述. 其中主要讲解了---变量的三个属性:作用域.链接属性和存储类型. 这三个属性决定了该变量在“什么地方可以使用”以及“该变量的值能够保持多久 ...

  2. C和指针 第三章 变量的储存类型 auto、static、register以及static关键词

    变量的储存类型决定标量何时创建,何时销毁以及他的值保持多久.有三个地方可以储存变量: 普通内存static 运行时堆栈auto 硬件寄存器register 变量的缺省储存类型取决于它的声明位置: 静态 ...

  3. C和指针 第三章 链接属性 extern、internal、none

    三种链接属性 组成一个程序有多个源文件,如果相同的标识符出现在多个源文件中,那么标识符的链接属性决定如何处理在不同文件中出现的标识符. 链接属性有三种: external:外部 多个源文件中的相同标识 ...

  4. C和指针 第三章 习题

    在一个源文件中,有两个函数x和y,定义一个链接属性external储存类型static的变量a,且y可以访问,x不可以访问,该如何定义呢? #include <stdio.h> void ...

  5. C和指针 第三章 四种作用域

    代码块作用域: 任何位于一对花括号之间是一个代码块,代码块内声明的标识符具有代码块作用域,嵌套代码块内,内部变量会屏蔽外部相同标示的标示符,非嵌套代码块,不会同时处于活动状态所以不会屏蔽. int m ...

  6. C和指针 (pointers on C)——第三章——数据

    第三章 数据 本章是非常重要的,在特定范围内使用.链接属性.存储类型.const.extern和statickeyword使用.几乎所有的公司是C++在采访的第一个问题. 总结: 具有external ...

  7. C++第三章课后作业答案及解析---指针的使用

    今天继续完成上周没有完成的习题---C++第三章课后作业,本章题涉及指针的使用,有指向对象的指针做函数参数,对象的引用以及友元类的使用方法等 它们具体的使用方法在下面的题目中会有具体的解析(解析标注在 ...

  8. 黑马程序员_ C语言基础之指针(三)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 概览 指针是C语言的精髓,但是很多初学者往往对于指针的概念并不深刻,以至于学完之后随着时间的推移 ...

  9. const 指针的三种使用方式

    ///////////////////////const 指针的三种状态///////////////////// 注意:const 的前后顺序 const 在类型之前 ---可以修改指针包含的地址, ...

随机推荐

  1. 三维等值面提取算法(Dual Contouring)

    上一篇介绍了Marching Cubes算法,Marching Cubes算法是三维重建算法中的经典算法,算法主要思想是检测与等值面相交的体素单元并计算交点的坐标,然后对不同的相交情况利用查找表在体素 ...

  2. File类-文件基本操作

    package com.java.io; import java.io.File; import java.io.IOException; import java.math.BigDecimal; i ...

  3. [No000069]Javascript中this关键字详解

    Quiz 请看下面的代码,最后alert出来的是什么呢?(chrome下按F12,选择Console直接复制粘贴运行) var name = "Bob"; var nameObj ...

  4. MVC4 自定义错误页面(转)

    一.概述 MVC4框架自带了定义错误页,该页面位于Shared/Error,该页面能够显示系统未能捕获的异常,如何才能使用该页面: 二.使用步骤: 1.配置WebConfig文件,在System.We ...

  5. 在基于vue的webpack脚手架开发中使用了代理转发,结果浏览器发出的请求中不带cookie导致登录时总是session失效怎么办?

    环境:            有2个业务接口需要转发到82的服务器上:     ../user/getCode.do     ../user/doLogin.do 现象:          使用上述的 ...

  6. npoi批量导入实现及相关技巧

    批量导入功能对于大部分后台系统来说都是不可或缺的一部分,常见的场景-基础数据的录入(部门,用户),用批量导入方便快捷.最近项目需要用到批量导入,决定花点时间写套比较通用的Excel导入功能.经过考虑, ...

  7. 测试工作的疑难杂症bugs

    一. 平台:安卓app 代码:重写onresume事件时,没有重新获取sessionId导致记录一下bug重现过程:1.登陆2.退出用户(不退出app)3.重新登录4.home键或者息屏5.再进入ap ...

  8. SQL Server 常用关键字

    SQL 建库 建表 --1.创建一个数据库 create database School; --删除数据库 drop database School; --创建数据库的时候指定一些选项. create ...

  9. ionic 开发笔记

    1.AngularJS 外部的控制器(DOM 事件.外部的回调函数如 jQuery UI 空间等)调用了 AngularJS 函数之后,必须调用$apply.在这种情况下,你需要命令 AngularJ ...

  10. Java Collection

    在 Java2中,有一套设计优良的接口和类组成了Java集合框架Collection,使程序员操作成批的数据或对象元素极为方便.这些接口和类有很多对抽象数据类型操作的API,而这是我们常用的且在数据结 ...