1、const char* p: p is a pointer to const char(char const* p 一样)
   意思就是不能通过p指针来修改p指向的内容(但是内容可以修改)。

2、char* p      : p is a pointer to char
   意思就是可通过p指针来修改p指向的内容

3、char* const p: p is a const pointer to char
   意思就是p指针是一个常指针,他指向的内存地址不能变,定义的时候就得初始化
   一旦给指针p赋了值,就不能再对他进行赋值操作,但是可以通过他修改他指向的
   内存地址中的值。

4、char p[size] :p is a const pointer to char
   意思就是p指针是一个常指针,当定义字符数组时,系统就为他分配了地址空间,
   p指针指向的地址是不能变的。但可以通过他修改其指向的内存空间中的值。当要
   通过P指针修改其内容时,只能通过传值的方式,不能通过传地址的方式。

5、string: C++的一个字符串类,他可以进行c版本字符串不允许的许多操作比如+ -,
    > < ==(比较,返回bool值)等操作。

赋值
1、const char* -> char*
1) strcpy(char*,const char*)这是一种拷贝的方法,a和b指向的地址不一样
char* a;
a = (char*)malloc(20);
const char* b = "zhangnianyong";
strcpy(a,b);

2)strcpy(char*,const char*)和上面一样
char* a = new char;
memset(a,0,20);
const char* b = "zhangnianyong";
strcpy(a,b);

3)强制转换
const char* b = "zhangnianyong";
char* a = (char*)b;
这种方式a和b指向的地址一样,可以通过指针a修改其内容,但是不能通
过指针b修改其内容。通过指针a修改其内容后,指针b指向的内容也发生
变化。

2、char* ->const char*
1)直接赋值
char* a;
const char* b = a;
这样指针a和指针b的指向的地址一样,可以通过指针a修改其内容,但是不
能通过指针b修改其内容,通过指针a修改其内容后,指针b指向的地址空间
的内容也发生了变化。

3、const char* -> char* const
1)强制转换
const char* b;
char* const a = (char*)b;
这种方式a和b指向的地址一样,可以通过指针a修改其内容,但是不能通过
指针b修改其内容。通过指针a修改其内容后,指针b指向的内容也发生变化。

4、char* const ->const char*
1)直接赋值
char a[5] = "zhang";
char* const b = a;
const char* c = b;
这种方式b和c指向的地址一样,可通过指针b修改其内容,但是不能通过指
针c来修改其内容。通过指针b修改其内容后,指针c指向的内容也发生变化。

5、char[] -> const char*、char*、char* const
1)直接赋值
char a[5] = "zhang";
const char* b = a;
char* c = a;
char* const d = a;
这种方式指针a和其他类型指针指向的地址是一样的,可以通过指针a修改来
修改其内容,如: a[i] = 'a'。

6、const char*、char*、char* const -> char[]
1)strcpy(char* const char*)
char a[20] = {0};
const char* b = "zhangnianyong";
char* const c = "zhangnianyong";
char* d       = "zhangnianyong";
strcpy(a,b/c/d);
通过拷贝的方式,

2)memcpy(void*, const void*, size)

7、char[] -> string
char a[20] = {0};
string b;
b = a;

8、char* -> string
char *a;
a = (char*)malloc(15);
string b;
strcpy(a,"zhangnianyong");
b = a;

9、const char* -> string;
const char* a;
string b;
b =a;

10、char* const -> string
char* const a;
string b;
b = a;
注意: char[]、const char*、char*、char* const -> string,直接赋值

11、string -> const char*
string a;
const char* b;
b = a.c_str();
12、string -> char[]、char*、char* const
只要通过中间变量const char*就可以了

const char*、char*、char* const、char[]、string的区别的更多相关文章

  1. C语言中为什么不能把char**赋给const char**

    这是我在知乎回答的一个问题. 这个问题是C中的一个深坑,首先说结论: char ** 和 const char ** 是两个不相容(incompatible)的类型,能够理解为不能直接赋值 在C11的 ...

  2. const char and static const char

    部分内容摘自:https://blog.csdn.net/ranhui_xia/article/details/32696669 The version with const char * will ...

  3. [Link 2005]vs2015 LNK2005 "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl printR(class std::basic_ostream<char,struct std::char_traits<char> > &,class QueryResult const &)" (?

      vs2015 LNK2005 "class std::basic_ostream<char,struct std::char_traits<char> > &am ...

  4. C++ char和string的区别

    'a'是char, "a"是char string,这两者都是普通的字符和字符串,和C中没什么不同 值得注意的是后者包含两个字符,末尾有一个隐身的'\0'而:string str ...

  5. char *s="string"和char s[]="string"的区别

    char *s="string"的内容是不可以改的 void main() {     char* pStr1 = "Hello!";     char pSt ...

  6. Java char 和 String 的区别: 字符编码及其存储

    一. ASCII码 上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定.这被称为ASCII码,一直沿用至今.一个字节(8bit)一共 可以用来表示256种不同的状态 ...

  7. c++编写递归函数char *itostr (int n,char *string),该函数将整数n转换为十进制表示的字符串。

    #include<iostream> #include<stdio.h> using namespace std; ; char *itostr (int n,char *St ...

  8. CString、char*与string的区别

    三者的区别 CString 是MFC或者ATL中的实现: string 是C++标准库中的实现: char* 为C编程中最常用的字符串指针,一般以’\0’为结束标志. string和CString均是 ...

  9. error LNK2019: 无法解析的外部符号 "class std::basic_ostream<char,struct std::char_traits<char> >

    1,VS2013: 错误 1 error LNK2019: 无法解析的外部符号 "class std::basic_ostream<char,struct std::char_trai ...

随机推荐

  1. Windows 环境下基于 nginx 的本地 PyPI 源

    Windows 环境下基于 nginx 的本地 PyPI 源的搭建: 1.登录 nginx 官网,下载安装包

  2. 浅析 ThreadLocal

    一.ThreadLocal类说明 ThreadLocal,很容易让人望文生义,直译"本地线程".ThreadLocal不是一个thread,是thread的局部变量.使用Threa ...

  3. PSObject

    PSBASE the raw view of the object PSADAPTED the fully adapted view of the object PSEXTENDED just the ...

  4. Web API接口 安全验证

    在上篇随笔<Web API应用架构设计分析(1)>,我对Web API的各种应用架构进行了概括性的分析和设计,Web API 是一种应用接口框架,它能够构建HTTP服务以支撑更广泛的客户端 ...

  5. Oracle 11g系统自己主动收集统计信息的一些知识

    在11g之前,当表的数据量改动超过总数据量的10%,就会晚上自己主动收集统计信息.怎样推断10%.之前的帖子有研究过:oracle自己主动统计信息的收集原理及实验.这个STALE_PERCENT=10 ...

  6. C++在使用Qt中SLOT宏须要注意的一个小细节

    大家都知道C++虚函数的机制,对于基类定义为虚函数的地方,子类假设覆写,在基类指针或者引用来指向子类的时候会实现动态绑定. 但假设指针去调用非虚函数,这个时候会调用C++的静态绑定,去推断当前的指针是 ...

  7. 【C语言】字符串替换空格:实现一个函数,把字符串里的空格替换成“%20”

    //字符串替换空格:实现一个函数,把字符串里的空格替换成"%20" #include <stdio.h> #include <assert.h> void ...

  8. C# 工厂模式示例

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 工厂模式 ...

  9. mysql中的存储过程和事务隔离

    ※存储过程存储过程是保存在数据库上的一段可执行代码.1.定义存储过程的语法是:Create procedure sp_name (参数..)Begin SQL语句End;2.调用它的方法:Call s ...

  10. JavaScript总结2--函数

    一.定义函数 在js中,函数也是对象,能赋值给变量,能当作参数,可以设置属性,和调用他拥有的方法.函数的toString()方法,会返回他完整的函数内容.他有两个定义方法,函数表达式和函数声明.当一个 ...