#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呢?
谢谢大家了:)
C++的指针
答案:2 悬赏:10 手机版
解决时间 2021-04-28 12:49
- 提问者网友:容嬷嬷拿针来
- 2021-04-27 20:06
最佳答案
- 五星知识达人网友:患得患失的劫
- 2021-04-27 20:39
LZ的这个问题不难理解。
pch2首先是一个字符指针,在声明的时候,已经初始化指向了ch2字符数组。
在执行这个循环for (i=1;*pch2++=*pch++;i++); 时,pch2指针所指向的ch2数组元素被逐个赋值更新为pch指针所指向的常量字符串。而当循环结束后,pch2指针所指向的地址是pch2数组'\0'后面的地址。
所以,这句话pch2=pch2-i; 的作用就是将pch2指针重新指向ch2数组的首地址。这是由于指针的值实际上是地址值,是整型数据,可以进行简单的算术运算。
pch2首先是一个字符指针,在声明的时候,已经初始化指向了ch2字符数组。
在执行这个循环for (i=1;*pch2++=*pch++;i++); 时,pch2指针所指向的ch2数组元素被逐个赋值更新为pch指针所指向的常量字符串。而当循环结束后,pch2指针所指向的地址是pch2数组'\0'后面的地址。
所以,这句话pch2=pch2-i; 的作用就是将pch2指针重新指向ch2数组的首地址。这是由于指针的值实际上是地址值,是整型数据,可以进行简单的算术运算。
全部回答
- 1楼网友:纵马山川剑自提
- 2021-04-27 20:52
确切的说 你用复制这个词就错了
因为pch2实际上上只是一个指针而已
他里面存放的只是一个地址变量
对一个地址变量进行加减运算当然可以
因为计算结果也只是一个指针变量
我们可以通过*pch2来访问变量指向的内容罢了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯