新手上路,求指教

hanyekanxue 2010-09-10 10:17:51
一直有个疑问,C++中可以声明指向常量的指针,例如
const char * name1="John";
char s[]="abc";
name1=s;
* name1="1"; //编译错误
name1本身的值可以改变
但是不能通过name1改变所指的对象。
我想问的是此时name1到底指向的是什么?是"John"还是"abc"?
...全文
135 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
doctor1190 2010-09-12
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 laxian2009 的回复:]
8楼说的很详细,
char * const ptr1 =str1 ;
//指针常量--指针本身是常量,指向的地址不可以变化,但是指向的地址所对应的内容可以变化

const char *ptr1 = str1;
//常量指针--指向字符串常量,所指向的字符串内容不能变,但是指向的地址可以变化
[/Quote]

上面的解释正解!

本题中,name1开始时指向"john",调用name1=s;这句后,name1指向“abc”;
你定义的这句const char * name1="John"; name1是一个指向const对象的指针,name1本身是可以改变的,但是不同通过name1来改变所指向的内容。
bbnjack 2010-09-12
  • 打赏
  • 举报
回复
其实在网上找下常量指针和指针常量就知道了。。。
laxian2009 2010-09-11
  • 打赏
  • 举报
回复
8楼说的很详细,
char * const ptr1 =str1 ;
//指针常量--指针本身是常量,指向的地址不可以变化,但是指向的地址所对应的内容可以变化

const char *ptr1 = str1;
//常量指针--指向字符串常量,所指向的字符串内容不能变,但是指向的地址可以变化
shirlytsh 2010-09-11
  • 打赏
  • 举报
回复
const char *是说指针指向的内容不能更改,即John不能更改,
但是指针的指向的地址是可以更改的,即指针name1可以指向s,
*name1是指指针指向的内容,将其改为1是不可以的
linux_id 2010-09-11
  • 打赏
  • 举报
回复
哦,当然还有
指向常量的常量指针:指针和指向指针的内容都是常量,一般很少用。
linux_id 2010-09-11
  • 打赏
  • 举报
回复
指向常量的指针: 指针是变量,指向内容是常量(即,解引用是常量)
常指针: 指针是常量,指向内容是变量 (即,解应用是变量)
十八道胡同 2010-09-11
  • 打赏
  • 举报
回复
错误修正, 我8楼的代码中的注释都是不可变的。
第一个*pc ,指向的数据不可变,指针pc可变
第一个pd ,指向的数据可变,指针pd不可变
十八道胡同 2010-09-11
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
int main()
{
const char *pc="hell0";
pc="china";
*pc="ch"; //这个是说明*pc的内容部可变
cout<<pc<<endl;
char * const pd="hello";
pd="china"; //这个说明pd的内容是不可以变的
cout<<pd<<endl;
return 0;
}

这个看你的cn0st的位置 ,第一个修饰的是*pc,第2个修饰的是pd
hanyekanxue 2010-09-11
  • 打赏
  • 举报
回复
哪位能给个具体的例子啊
lire1213 2010-09-11
  • 打赏
  • 举报
回复
常量指针是数据不可变,但指针可以改变;
指针常量是数据可变,但指针不可变;
注意const 与*的位置关系, 数据在左,指针在右
ForestDB 2010-09-11
  • 打赏
  • 举报
回复
const char * pc;
pc的指向可以改变,但它指向的“东西”不能改变。
hanyekanxue 2010-09-10
  • 打赏
  • 举报
回复
不对啊,我刚做过实验,
const char *pc="hell0";
pc="china";
cout<<pc<<endl;
但是输出的结果是“china”啊,照你说的这不应该改变指针所指变量,应该还是输出"hello"啊
smallsky_keke 2010-09-10
  • 打赏
  • 举报
回复
同意楼上的说法,还有name1=s;这个好像也是错误的,只有string才能执行这样的操作,字符数组好像不行的,需要用strcpy()函数吧!你这样赋值会有错误的。
Me_Cop 2010-09-10
  • 打赏
  • 举报
回复
你上面的是常量指针,意思是这个指针指向的内容不能变,但是指向的地址是可以变化的
就是name1可以改变,但是*name1不能改变的。所以name1指向的地址是s,但是值却是"John"
还一个是指针常量,跟常量指针刚好相反。
pengzhixi 2010-09-10
  • 打赏
  • 举报
回复
name1所指向的字符串放在常量数据区,不可修改。

64,649

社区成员

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

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