const char *p;和char * const p的区别
const char *p; const修饰*p,所以*p是一个常量,不可修改。
char* const p; const修饰p,所以指针p是一个常量,不可修改。
#include<iostream>
using namespace std;
int main(void)
{
const char *p;
p="I Love ShangHai";
while(p)
{
if(*p=='L')
*p='l';//编译不能通过。error:表达式左值必须是可修改的值 *p不可修改
p++;
}
getchar();
}
上面程序想通过遍历字符串,把大写的L改为小写的l,但是由于p指针指向的值不可修改,*p='l'; 编译不能通过。
#include<iostream>
using namespace std;
int main(void)
{
char * const p="I Love Shang Hai";
while(p)
{
cout<<*p;
p++;//编译不能通过。error:表达式必须是可修改的左值 指针p不可修改
}
cout<<endl;
getchar();
}
上面程序想通过遍历输出字符串,但是由于指针p是常量,p++编译不能通过。
总结:是指针常量还是常量指针,主要看const修饰谁。const char *p; 中的const修饰*p,故p指向的值不可修改。char *const p; 中的const修饰p,故指针p不可修改。
看下面的一些情况:
1,const int *a = &b
int b = 500;
const int *a = &b;
*a=600;//错误 const 修饰*a,所以*a是一个常量不可以修改
如果一定要修改呢?可以尝试以下解决方案。就是抓住p是变量,让指针p指向别的变量,或者直接改变所指向的变量。
方案1:
int b = 500;
const int *a = &b;
b=600;
cout<<*a<<endl;//正确
方案2:
int b = 500;
int c=600;
const int *a = &b;
a=&c; //虽然*a是常量,但是a仍然是一个指针变量
cout<<*a<<endl;
2,int * const a = &b;
int b = 500;
int c=600;
int * const a=&b;
a=&c;//错误,const 修饰a,所以a不可修改。
cout<<*a<<endl
3,常量的定义必须先初始化。
int b = 500;
int c=600;
int * const a; //错误,没有初始化
const int *a ; //正确,*a是常量,但是a仍然是一个指针变量。
const char *p;和char * const p的区别的更多相关文章
- C语言执行时报错“表达式必须是可修改的左值,无法从“const char [3]”转换为“char [120]” ”,原因:字符串不能直接赋值
解决该问题的方法:使用strcpy函数进行字符串拷贝 原型声明:char *strcpy(char* dest, const char *src); 头文件:#include <string ...
- const char *p、char const *p、char * const p的区别?
const char *p和char const *p是一样的,都表示定义一个指向字符常量的指针,指针的内容(字符)不可变.char * const p表示一个指向字符的指针常量,字符可以改变,但是指 ...
- error: C2664: “zajiao::zajiao(const zajiao &)”: 无法将参数 1 从“const char [12]”转换为“char *”
原本打算在QT用一个字符串"ABCDEF12345"作为类zajiao的构造函数的参数,用来创建类zajiao的对象zajiao1. zajiao zajiao1("AB ...
- char * p = "abc"与const char *p = "abc"
char * p = "abc"与const char *p = "abc"的区别是什么呢? 第一个语句会产生问题: warning: deprecated c ...
- 高德地图引入库错误std::string::find_first_of(char const*, unsigned long, unsigned long) const"
一:std:编译器错误解决 二:错误提示 "std::string::find_first_of(char const*, unsigned long, unsigned long) con ...
- const *char p和char const *p
const *char p和char const *p,const char*p的区别 char*const p——p必须初始化,且不能指向别处,即p是指针常量: char const*p——p指向的 ...
- 关于 const char *ptr,char const *ptr,char *const ptr 的讨论
对于每个做C/C++的伙伴来说,面试中少不了关于const 的考察,尤其是对于刚毕业的新人. 今天听见同事在讨论这个问题,就随手写一下自己的理解.希望对大家又所帮助. 首先来说一下char *ptr: ...
- error C2664: “ATL::CStringT<BaseType,StringTraits>::Remove”: 不能将参数 1 从“const char [2]”转换为“char”
转自VC错误:http://www.vcerror.com/?p=1395 问题描述: 代码: CString str("asdfafda"); str.Remove(" ...
- const char *转化为char *的方法
直接将const char *赋值给char *是错误的,编译器不允许这种操作. #include "stdio.h" #include "string.h" ...
随机推荐
- webpack最简示例
安装webapck webpack依赖node环境,所以在此之前要保证系统中有node环境. 打开cmd控制台 $ npm install webpack -g 全局安装webpack 配置模块 we ...
- python socket单线程通信
注意 socket通信默认的情况下是属于阻塞形式通信,在recv与accept函数会进行阻塞 1.客户端正常退出的情况下,server端的con的通道会正常的关闭,recv直接赋值为空 2.在wind ...
- Django框架初识
一.安装: pip3 install django 注意pip加入环境变量,安装好以后记得把Django加入环境变量 安装完成后,会在python目录下多了两个文件:1个django文件,1个 ...
- 读Ghost博客源码与自定义Ghost博客主题
我使用的Ghost博客一直使用者默认的Casper主题.我向来没怎么打理过自己博客,一方面认为自己不够专业,很难写出质量比较高的文字:另一方面认为博客太耗时间,很容易影响正常的工作内容.最近公司即将搬 ...
- selenium打开chrome浏览器代码
import os from selenium import webdriver chromedriver = "C:\Program Files (x86)\Google\Chrome\A ...
- JVM基础篇(一)
JVM简介 JVM(Java虚拟机)是一个虚拟的机器,在实际的计算机上通过软件模拟来实现.JVM有自己的硬件,如处理器.堆栈.寄存器等,还具有相应的指令系统. JVM包括一套字节码指令集.一组寄存器. ...
- 使用原生JS定位网页元素
约定:1.<meta name="viewport" content="width=device-width">这种标记简称"wdw&qu ...
- 网络编程之socketserver
网络编程之socketserver """ socketserver.py 中的5个基础类 +------------+ | BaseServer | +-------- ...
- mongoDB高级查询$type4array使用解析
今天在使用mongoDB高级查询$type:符号 -- 4代指Array类型发现一个问题. $type符号: $type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果. 下面是mong ...
- 在windows端和linux端安装Git
一.Git的安装 1. 在windows端 到地址:https://git-scm.com/downloads 选择对应版本下载后,进行傻瓜式安装即可 2. 在linux端 查看是否安装了git,出 ...