永发信息网

C++的指针

答案:2  悬赏:10  手机版
解决时间 2021-04-28 12:49
#include<iostream.h>
#include<string.h>
void main()
{
char ch[]="hello,world!";
char *pch="nanjing,china!";
char ch1[20],ch2[20],ch3[20];
char *pch1=ch1,*pch2=ch2,*pch3=ch3;
for(int i=0;i<strlen(ch)+1;i++)
ch2[i]=ch[i];
cout<<pch2<<endl;//hello,world!12
pch1=ch;//将一个字符数组名赋予一个指针变量
cout<<pch1<<endl;//nanjing,china!15
cout<<pch2<<endl;
for (i=1;*pch2++=*pch++;i++);
*pch2='\0';
pch2=pch2-i;
cout<<pch2<<endl;
}

这前面我是明白的,但是对于pch2=pch2-i;这句我实在不理解……书上说是将指针移动到字符串启始位置,这个我也能理解……但是为什么这样就能复制给PCH2呢?
谢谢大家了:)
最佳答案
LZ的这个问题不难理解。
pch2首先是一个字符指针,在声明的时候,已经初始化指向了ch2字符数组。

在执行这个循环for (i=1;*pch2++=*pch++;i++); 时,pch2指针所指向的ch2数组元素被逐个赋值更新为pch指针所指向的常量字符串。而当循环结束后,pch2指针所指向的地址是pch2数组'\0'后面的地址。

所以,这句话pch2=pch2-i; 的作用就是将pch2指针重新指向ch2数组的首地址。这是由于指针的值实际上是地址值,是整型数据,可以进行简单的算术运算。
全部回答
确切的说 你用复制这个词就错了 因为pch2实际上上只是一个指针而已 他里面存放的只是一个地址变量 对一个地址变量进行加减运算当然可以 因为计算结果也只是一个指针变量 我们可以通过*pch2来访问变量指向的内容罢了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我在采玫瑰时得到一个星座宝宝,为什么找不到
头发拉直几次了.怎么烫才能弹性好的大卷
艾灸有什么好处,念心经的好处是什么
盘丝怎么加点
宝隆居家酒店(东北门)地址有知道的么?有点事
李炜和李行亮真的出车祸了吗?他们今晚还能否
笔记本声音有点杂杂的生意
睡觉不用枕头是好是坏
初3科学题目
你认为怎样才算爱国?
笔记本反映慢,能不能让别人远程协助
急急???怎么用手机修改QQ密码?
100+的崩龙能直多少钱
男人为什么会总想以前的他
完美国际收168飞机要用多少完美币呢。3000W能
推荐资讯
哈利波特电子书下载
我的电脑这几天开机后是黑屏,有开机音乐声,
诺基亚8800A有几个版本、分别是?什么价位?
鼓励练琴的好句子,音乐家赫尔绍尔刻苦怎样练
英仙座流星雨什么时候出现?
炫舞上哪首歌节奏模式有1300个?
QQ对战CS1.5进不去
该不该相信命,该不该'?
没钱Q宠就只有等死么
怎样恢复小游戏双人游戏中双猫战士以前玩过的
七夕节一个人怎么过?
怎么用剑魂扯?具体点。
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?