const char * 、char const *、 char * const 三者的区别

原文链接:https://blog.csdn.net/silentob/article/details/76994618

C/C++ 中关于以下三种定义:

const char *ptr;

char const *ptr;

char * const ptr;

整理三者之间的区别与联系。

一、const char *ptr;

定义一个指向字符常量的指针,这里,ptr是一个指向 char* 类型的常量,所以不能用ptr来修改所指向的内容,换句话说,*ptr的值为const,不能修改。但是ptr的声明并不意味着它指向的值实际上就是一个常量,而只是意味着对ptr而言,这个值是常量。实验如下:ptr指向str,而str不是const,可以直接通过str变量来修改str的值,但是确不能通过ptr指针来修改。

gcc编译报错信息:

注释掉16行ptr[0] = ‘s‘;运行正常,运行结果为:

hello world
gello world

另外还可以通过重新赋值给该指针来修改指针指向的值,如上代码中取消7、18行的注释,运行结果为:

hello world
good game!!

二、char const *ptr;
此种写法和const char *等价,大家可以自行实验验证。

三、char * const ptr;

定义一个指向字符的指针常数,即const指针,实验得知,不能修改ptr指针,但是可以修改该指针指向的内容。实验如下:

gcc报错信息:

注释掉17行代码运行正常,运行结果为:

hello world
sello world

原文地址:https://www.cnblogs.com/lyqf/p/12408658.html

时间: 2024-11-09 13:08:30

const char * 、char const *、 char * const 三者的区别的相关文章

char * p = "abc"与const char *p = "abc"

char * p = "abc"与const char *p = "abc"的区别是什么呢? 第一个语句会产生问题: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings] 此时我们只需要改成第二个用法警告就消失了,这是为什么呢? 我们来分别理解以下两个语句,首先要清楚的是char * p语句定义的p是一个指针变量,假设我们用的是第一个语句,那么我们所表达的意思

const char* &p 和 char* const &p 区别

const char* &p 和 char* const &p 两种引用: 两者都是对一个对象的引用. 但是前者的"这个对象"是 const char*,一个指向 const char 的指针,注意!虽 然这个指针指向的char不可以改变,但这个指针本身的值是可以改变的,也就是说, 他可以被改变而指向另一个 const char 对象. 后者的"这个对象"则是char*, 一个指向char的指针.这个指针指向的东西是可以 改变的,但是这个指针本身是不

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

原本打算用一个字符串"ABCDEF12345"作为类zajiao的构造函数的参数,用来创建类zajiao的对象zajiao1. 1 zajiao zajiao1("ABCDEF12345"); 结果提示: F:\Users\denggelin\Documents\qtduojicheng\main.cpp:31: error: C2664: “zajiao::zajiao(const zajiao &)”: 无法将参数 1 从“const char [12]

Invalid arguments ' Candidates are: std::basic_ostream<char,std::char_traits<char>> & write(const char *, int) '

const char* p = "hello itcast"; cout.write(p,strlen(p)) << endl; cout.write(p,strlen(p) - 4) << endl; cout.write(p,strlen(p) - 4) << endl; 代码十分简单,通过对比vs,得知gcc调用的是ostream.tcc文件中的write函数write(const _CharT* __s, streamsize __n). v

C 语言的 const 指针,指针的const有什么不同

Read it backwards (as driven by Clockwise/Spiral Rule)... int* - pointer to int int const * - pointer to const int int * const - const pointer to int int const * const - const pointer to const int Now the first const can be on either side of the type

char、signed char、unsigned char的区别

ANSI C 提供了3种字符类型,分别是char.signed char.unsigned char char相当于signed char或者unsigned char,但是这取决于编译器! 这三种字符类型都是按照1个字节存储的,可以保存256个不同的值. 不同的是取值范围signed char取值范围是 -128 到 127unsigned char 取值范围是 0 到 255 signed char的最高位为符号位,因此char能表示-128~127, unsigned char没有符号位,

char *p 与char p[] 比较

所有的字符窜常量都被放在静态内存区 因为字符串常量很少需要修改,放在静态内存区会提高效率 例: char str1[] = "abc"; char str2[] = "abc"; const char str3[] = "abc"; const char str4[] = "abc"; const char *str5 = "abc"; const char *str6 = "abc";

char *s 和 char s[] 的区别小结

目前中有不少c的程序,在与项目新成员的交流中发现,普遍对于char *s1 和 char s2[] 认识有误区(认为无区别),导致有时出现“难以理解”的错误.一时也不能说得很明白,网上也搜了一下相关文章发现一些写的比较好的,综合了一下当教育资料备用. char *s1 = "hello";char s2[] = "hello"; [区别所在] char *s1 的s1,而指针是指向一块内存区域,它指向的内存区域的大小可以随时改变,而且当指针指向常量字符串时,它的内容

const修饰函数参数 const修饰函数返回值 const修饰成员函数

看到const 关键字,C++程序员首先想到的可能是const 常量.这可不是良好的条件反射.如果只知道用const 定义常量,那么相当于把火药仅用于制作鞭炮.const 更大的魅力是它可以修饰函数的参数.返回值,甚至函数的定义体. const 是constant 的缩写,"恒定不变"的意思.被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性.所以很多C++程序设计书籍建议:"Use const whenever you need". 1