请看下面三种定义:

const char *p;

char const *p;

char * const p;

首先看第一种,我们先看p,本着”从里往外”的原则,p是一个char *类型的变量,但char *前面有一个const修饰,即p所指向的内容为const类型不可修改,我们可以写如下程序进行实验,当试图对p指向的数组的第一个元素进行修改时,编译即可发现报错:

第二种:char const *p;  const位于char *之间,由于char *是p的类型,此种写法和const char *等价,大家可以自行实验,如下图:

最后一种,char * const p; 这里const在p之前,修饰的是p,即p是不可修改的,所以,我们可以实验:

可以看到没有错误,p所指向的内容可以修改,而如果试图修改p的值,如下:

可以发现依旧是报这个错误,大家可以亲自上机实验,来加深理解。

所以答案:

const char *p; // 声明一个指向字符或字符串常量的指针(p所指向的内容不可修改)

char const *p;// 同上

char * const p;//声明一个指向字符或字符串的指针常量,即不可以修改p的值。

const char *p1;   //p1可以被改变,*p1不可以被改变,既p1可以转向

char onst *p2;     //p2可以改变,*p2不可以被改变,既p2可以转向

char * const p3;  //p3不可以被改变,*p3可以被改变

const char const *p4;   //p4与*p4都不可以被改变

const char *p; char const *p; char * const p的区别的更多相关文章

  1. error: C2664: “zajiao::zajiao(const zajiao &)”: 无法将参数 1 从“const char [12]”转换为“char *”

    原本打算在QT用一个字符串"ABCDEF12345"作为类zajiao的构造函数的参数,用来创建类zajiao的对象zajiao1. zajiao zajiao1("AB ...

  2. 20130324 LBP CSLBP 全局存储区 局部存储区 char c[]=”hello world”和char *str=”hello world”的区别

    1.LBP and CSLBP 2.再论char c[]=”hello world”和char *str=”hello world”的区别 /**************代码1************ ...

  3. 理解extern char s[100]与extern char *s

    在x.c中定义了一个字符数组 char s[100],在l.c中进行引用extern char s[200], 有些c程序新手经常把它写成extern char *s. 这两种写法的含义一样吗? 首先 ...

  4. 【转】int const A::func()和int A::func() const

    int const A::func() { return 0; }int A::func() const { return 0; } 上面的代码是合法的,其中A::func成员函数[只能在成员函数后面 ...

  5. 类的const成员函数,是如何改变const对象的?

    我们知道类里面的const的成员函数一般是不允许改变类对象的,但是我们知道const 类型的指针是可以强制类型转出成非const指针的,同样的道理,this指针也可以被强制类型转换 class Y{ ...

  6. VC++2017关于项目出现"const char *" 类型的实参与 "char *" 类型的形参不兼容错误的解决方法

    C++项目中经常会定义如下形式的字符串: char *texts[] = { "1. Open Account", "2. To Deposit Money", ...

  7. char s[]字串和char *s字串有什麼区别?

    C語言有兩種字串宣告方式char s[]和char *s,兩者有什麼差異呢? Introduction char s[] = "Hello World"; (只是用字符串常量初始化 ...

  8. char、varchar、varchar(2)的区别

    char是存储字节是一定的,例如char(10),存储内容为"java",那么实际存储的是"java      ",后面是6个空字符.按字节存储: varcha ...

  9. C语言char*字符串数组和unsigned char[]数组的相互转换

    #include <iostream> #include <string> using namespace std; void convertUnCharToStr(char* ...

  10. char a[] = "hello world1"和char *p = "hello world2";的区别(转)

    转自:jianchi88 http://blog.csdn.net/jianchi88/article/details/6876405 #include<stdio.h> int main ...

随机推荐

  1. Oracle hash分区的秘密

    转自:http://www.hellodb.net/2009/12/hash_partition.html 在面试时经常会问一个问题,请列举出hash在数据库内部的应用,hash的原理虽然简单,但是它 ...

  2. hawq创建filespace,tablespace,database,table

    使用HAWQ   在HAWQ的使用上跟Greenplum基本就一样一样的了.比如:   1. 创建表空间 #选创建filespace,生成配置文件 [gpadmin@master ~]$ hawq f ...

  3. SQL夯实基础(二):连接操作中使用on与where筛选的差异

    一.on筛选和where筛选 在连接查询语法中,另人迷惑首当其冲的就要属on筛选和where筛选的区别了,如果在我们编写查询的时候, 筛选条件的放置不管是在on后面还是where后面, 查出来的结果总 ...

  4. LeetCode Output Contest Matches

    原题链接在这里:https://leetcode.com/problems/output-contest-matches/description/ 题目: During the NBA playoff ...

  5. [转] 如何用BSP树生成游戏地图

    作者:Timothy Hely 当用对象随机填充某个区域如地下城中的房间时,你可能会遇到的问题是太过随机,导致分布疏密不均或混乱.在本教程中,我将告诉大家如何使用二进制空间划分法(游戏邦注:即Bina ...

  6. GWT更改元素样式属性

    GWT有时候不像普通网页那样可以自由的添加CSS改变样式,所幸gwt提供了一些底层的方法,通过这些方法来实现DOM操作等.通过gwt部件的getElement()可以取得dom上的元素,这时就能对该元 ...

  7. Java-API:java.math.BigDecimal

    ylbtech-Java-API:java.math.BigDecimal 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部 1. https://docs.ora ...

  8. net.sf.json.JSONObject 和org.json.JSONObject

    参考 net.sf.json.JSONObject 和org.json.JSONObject 的差别

  9. 数据库:MySQL索引背后的数据结构及算法原理【转】

    原文:http://blog.codinglabs.org/articles/theory-of-mysql-index.html 摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话 ...

  10. python IOError: windows directory not found at xxxxx win32

    您需要修改 PATH 环境变量,将Python的可执行程序及额外的脚本添加到系统路径中.将以下路径添加到 PATH 中: C:\Python2.7\;C:\Python2.7\Scripts\;请打开 ...