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

const char *p,char const *p和char *const p区别

这篇博客对const char *pchar const *pchar * const p进行区别

  1. const char *p;
  2. char const *p;
  3. char * const p;

这句话的含义是定义了一个char类型的指针变量p,但是char前面有一个const修饰,所以p所指向的内容为const类型不可修改,但是可以修改指针的指向地址,为其重新赋值。简单说,就是内容不可改,但是地址可改。下面用一个例子说明。

#include<bits/stdc++.h>

using namespace std;

signed main(){
	char s[]="hello";
	char t[]="world";
	const char* p=s;
	//错误的
	//原因在于指针的内容不能更改,因此下面这句语句是有问题的 
	//*p=t[0];
	//但是可以让指针的地址可以改变 
	p=t;
	//查看指针指向的头一个字符
	cout<<*p<<endl; 
	return 0;
} 

在这里插入图片描述

  • char const *p

注意:这里则const实际上是修饰前面的char类型的,因此和const char * p是一样的含义,同时用上面的例子来演示。简单说,就是内容不可改,但是地址可改

#include<bits/stdc++.h>

using namespace std;
#define int long long
const int N = 2e6+100;

signed main(){
	char s[]="hello";
	char t[]="world";
	 char const *p=s;
	//错误的
	//原因在于指针的内容不能更改,因此下面这句语句是有问题的 
//	*p=t[0];
	//但是可以让指针的地址可以改变 
	p=t;
	//查看指针指向的头一个字符
	cout<<*p<<endl; 
	
	return 0;
} 

在这里插入图片描述

  • char * const p;

解释:声明一个指向字符或字符串的指针常量,即不可以修改p的值,也就是地址无法修改。同样用上面的程序说明。简单说,就是内容可以改,但是地址不可改

#include<bits/stdc++.h>

using namespace std;
#define int long long
const int N = 2e6+100;

signed main(){
	char s[]="hello";
	char t[]="world";
	 char* const p=s;
	//错误的
	//但是可以让指针指向的内容进行更改 
	*p=t[0];
	//原因在于指针的地址不能更改,因此下面这句语句是有问题的
	//p=t;
	//查看指针指向的头一个字符
	cout<<*p<<endl; 
	return 0;
} 

在这里插入图片描述

相关文章:

  • disruptor (史上最全之1):伪共享原理性能对比实战
  • 网络安全防御体系建设-防守实例
  • 基于Java+SpringBoot+Thymeleaf+Mysql在线外卖点餐系统设计与实现
  • 手把手带你免费申请《软件著作权》 超详细计算机软件著作权申请教程 文末送模板
  • Mysql中级篇
  • 小学生python游戏编程2----飞机大战1
  • 用python实现自动回复QQ消息——不到60行
  • 第十三届蓝桥杯C++B组国赛E题——出差 (AC)
  • 【大数据ETL工具,Kettle的学习和使用】
  • C++----二叉树的进阶
  • java基于微信小程序的智能停车场管理系统+ssm+uinapp+Mysql+计算机毕业设计
  • 学会这个样生成性能测试报告,拿下20k轻轻松松
  • 爬取小说章节,并制作成词云进行宣传
  • [架构之路-18]:目标系统 - 硬件平台 - 案例1 - 单片机MCU STM32 芯片的工作原理与启动流程
  • C++内存管理以及模板的引入
  • 4. 路由到控制器 - Laravel从零开始教程
  • Hibernate最全面试题
  • JavaScript HTML DOM
  • Linux各目录及每个目录的详细介绍
  • Promise初体验
  • Python学习之路13-记分
  • vuex 笔记整理
  • 闭包,sync使用细节
  • 动态规划入门(以爬楼梯为例)
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 离散点最小(凸)包围边界查找
  • 模型微调
  • 数据可视化之 Sankey 桑基图的实现
  • 通过npm或yarn自动生成vue组件
  • 栈实现走出迷宫(C++)
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 大数据全解:定义、价值及挑战
  • ###STL(标准模板库)
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #include
  • #QT(智能家居界面-界面切换)
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (4) PIVOT 和 UPIVOT 的使用
  • (C#)一个最简单的链表类
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)计算机毕业设计ssm电影分享网站
  • (四) Graphivz 颜色选择
  • .form文件_一篇文章学会文件上传
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .net 中viewstate的原理和使用
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .net经典笔试题
  • .NET序列化 serializable,反序列化
  • .NET中使用Redis (二)
  • @html.ActionLink的几种参数格式
  • @Validated和@Valid校验参数区别