const char*、char*、char* const、char[]、string的区别
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的区别的更多相关文章
- C语言中为什么不能把char**赋给const char**
这是我在知乎回答的一个问题. 这个问题是C中的一个深坑,首先说结论: char ** 和 const char ** 是两个不相容(incompatible)的类型,能够理解为不能直接赋值 在C11的 ...
- const char and static const char
部分内容摘自:https://blog.csdn.net/ranhui_xia/article/details/32696669 The version with const char * will ...
- [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 ...
- C++ char和string的区别
'a'是char, "a"是char string,这两者都是普通的字符和字符串,和C中没什么不同 值得注意的是后者包含两个字符,末尾有一个隐身的'\0'而:string str ...
- char *s="string"和char s[]="string"的区别
char *s="string"的内容是不可以改的 void main() { char* pStr1 = "Hello!"; char pSt ...
- Java char 和 String 的区别: 字符编码及其存储
一. ASCII码 上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定.这被称为ASCII码,一直沿用至今.一个字节(8bit)一共 可以用来表示256种不同的状态 ...
- c++编写递归函数char *itostr (int n,char *string),该函数将整数n转换为十进制表示的字符串。
#include<iostream> #include<stdio.h> using namespace std; ; char *itostr (int n,char *St ...
- CString、char*与string的区别
三者的区别 CString 是MFC或者ATL中的实现: string 是C++标准库中的实现: char* 为C编程中最常用的字符串指针,一般以’\0’为结束标志. string和CString均是 ...
- 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 ...
随机推荐
- SQL函数中的动态执行语句
一.为什么要使用动态执行语句? 由于在PL/SQL 块或者存储过程中只支持DML语句及控制流语句,并不支持DDL语句,所以Oracle动态执行语句便应允而生了.关于DDL与DML的区别,请参见:DDL ...
- ECSHOP模板文件说明
最新ECSHOP 2.7.3完整的一套ECSHOP模板有一下构造 • 35个 .dwt文件(模板框架文件.可调用lbi库文件的主体文件) • 57个 .lbi文件(模板库文件,可通过后台库项目管理直接 ...
- 给定一个字符串,仅由a,b,c 3种小写字母组成。
package com.boco.study; /** * 题目详情 给定一个字符串,仅由a,b,c 3种小写字母组成. 当出现连续两个不同的字母时,你可以用另外一个字母替换它,如 有ab或ba连续出 ...
- 【甘道夫】HBase基本数据操作的详细说明【完整版,精绝】
介绍 之前具体写了一篇HBase过滤器的文章.今天把基础的表和数据相关操作补上. 本文档參考最新(截止2014年7月16日)的官方Ref Guide.Developer API编写. 全部代码均基于& ...
- string中find函数的使用
9.47 编写程序,首先查找string"ab2c3d7R4E6"中的每个数字字符,然后查找其中每个字母字符.编写两个版本的程序,第一个要使用find_first_of,第二个要使 ...
- 解决MVC Jquery"此请求已被阻止,因为当用在 GET 请求中时,会将敏感信息透漏给第三方网站"的问题
在ASP.NET MVC项目中,使用AJAX向控制器发送GET请求获取JSON数据时,出现这个错误:"此请求已被阻止,因为当用在 GET 请求中时,会将敏感信息透漏给第三方网站.若要允许 G ...
- Mantis 安装与配置
1. 适用范围 a. 本文介绍基于 Windows 下的缺陷管理平台 Mantis. 2. 软件准备 a. 下载 EasyPHP:http://www.easyphp.org/easyphp-devs ...
- 【转】Singleton单例模式
对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务:一个系统只能有一个窗口管理器或文件系统:一个系统只能有一个计时工具或ID(序号)生成器. ...
- 2.CentOS更换阿里源
第一步:备份本地yum源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 第二步:下载阿里y ...
- win7 Sendto修改
sendto目录现在被移到了这里 %APPDATA%\Microsoft\Windows\SendTo %APPDATA%是个环境变量,具体来说是在这里: C:\users\<username& ...