const char* 指向的内容能被修改吗?

cuijixin 2010-07-21 03:56:53
如果一个常量字符指针在初始化的时候被赋值为NULL,它还能被修改为指向其他值吗?
例如:

const char* str = NULL;

......

str = “asdf”;

...全文
1885 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
kongshi000 2010-07-21
  • 打赏
  • 举报
回复
完全正确![Quote=引用 1 楼 thefirstz 的回复:]
可以,它指向的内容不能改
[/Quote]
phpjspasp 2010-07-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 algorithms_memo 的回复:]

可以更改指针,但不可以更改指向的内容。如下:
C/C++ code

const char *p1 = "Hello world"; // p1 指向的地址可更改
// 但是不可更改p指向的内容,比如*p1='c'是错误的
p1 = "New Hello world"; // ok
p1[0] = 'c'; ……
[/Quote]
const char *p1 = "Hello world";
这个p1指向的内容不能被修改与p1是不是const char *没什么关系,这个不能修改的原因是p1所指向的内容在常量区内。所以不能修改。
phpjspasp 2010-07-21
  • 打赏
  • 举报
回复
const char * str;
当str指向一个字符串的时候,它的含义是:
不能通过 str 去修改 str 指向的字符串。
并不意味str指向的字符串不能被修改。



#include <iostream>
using namespace std;

int main()
{
char arr[] = "hello world\n";
cout << arr << endl;
const char *str = arr;
arr[0] = 'H'; //没问题
cout << arr << endl;
str[0] = 'h';//这句会报错,因为你不能通过 str 修改它指向的字符串
return 0;
}
algorithms_memo 2010-07-21
  • 打赏
  • 举报
回复
可以更改指针,但不可以更改指向的内容。如下:

const char *p1 = "Hello world"; // p1 指向的地址可更改
// 但是不可更改p指向的内容,比如*p1='c'是错误的
p1 = "New Hello world"; // ok
p1[0] = 'c'; // Compile ERROR !!!

char const *p2 = "Hello world"; // 同p1
p2 = "New Hello world"; // ok
p2[0] = 'c'; // Compile ERROR !!!

char str[] = "Hello world";
char * const p3 = str; // p3指向地址不可更改,但是可以更改所指向地址内容
p3 = "New Hello world"; // Compile ERROR !!!
p3[0] = 'c'; // ok
p3[1] = 'p'; // ok
p3[2] = 'p'; // ok

char const * const p4 = "Hello world"; // p4指向地址和内容均不可更改
p4 = "New Hello world" // ERROR !!!
p4[0] = 'c' // ERROR !!!

const char * const p5 = "Hello world"; // 同p4
MFC_ipsu 2010-07-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 pengzhixi 的回复:]
可以修改指针变量本身
[/Quote]


同上..不能修改
cnlm2 2010-07-21
  • 打赏
  • 举报
回复

  常量指针,表述为“是常量的指针”,它首先应该是一个指针。
  指针常量,表述为“是指针的常量”,它首先应该是一个常量。


常量指针 const char *p; p指向的内容不可变
指针常量 char* const p; p指向的地址不可变
healer_kx 2010-07-21
  • 打赏
  • 举报
回复
const char* p = "Hello World";

理论上是说p指向的内容,即"Hello World"作为内容是const的不可以改。

而p不是const的,p可以改。比如说
p = "Hello bu World";
pengzhixi 2010-07-21
  • 打赏
  • 举报
回复
可以修改指针变量本身
昵称很不好取 2010-07-21
  • 打赏
  • 举报
回复
可以,它指向的内容不能改

65,179

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧