引用问题,知道的来看看~

cocat 2010-01-24 12:23:23
三段类似程序,越看越乱,知道的解释下

//1.cpp
#include<iostream>
using namespace std;

char* a[3]={"早上好","下午好","晚上好"};
char* getPointer(int index)
{
return a[index];
}
void travel()
{
for(int i=0;i<3;i++)
{
cout<<a[i]<<' ';
}
cout<<endl;
}
int main()
{
char* &p=getPointer(1);
p="大家好";

travel();

return 0;
}



2.cpp
#include<iostream>
using namespace std;

char* a[3]={"早上好","下午好","晚上好"};
char* &getPointer(int index)//加了个引用
{
return a[index];
}
void travel()
{
for(int i=0;i<3;i++)
{
cout<<a[i]<<' ';
}
cout<<endl;
}
int main()
{
/*char* p=getPointer(1);
p="大家好";*/ //为什么这样不行?得用getPointer(1)="大家好"
getPointer(1)="大家好";
travel();
return 0;
}



//3.cpp
#include<iostream>
using namespace std;

char* a[3]={"早上好","下午好","晚上好"};
char* &getPointer(int index)//加了个引用
{
return a[index];
}
void travel()
{
for(int i=0;i<3;i++)
{
cout<<a[i]<<' ';
}
cout<<endl;
}
int main()
{
char* &p=getPointer(1);//这里又加个引用,为什么可以?
p="大家好";
travel();
return 0;
}

...全文
127 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
z569362161 2010-01-24
  • 打赏
  • 举报
回复
晕就不要看。

接点分
cattycat 2010-01-24
  • 打赏
  • 举报
回复
你的第一个不行,char* 不能转成char* &
第二个可以,没有修改a[1]
第三个可以,修改了a[1].
arong1234 2010-01-24
  • 打赏
  • 举报
回复
第一个中: char* &p=getPointer(1);这本来就是非法的,引用必须真的指向一个指针“变量”,而你这个函数返回的是一个指针值,不是变量

第二个中:
/*char* p=getPointer(1);
p="大家好";*/

这样的代码只是修改了p,和你那个数组毫无关系,因为p只是getPointer返回的指针引用的一个临时拷贝

楼主完全没有理解“引用”到底是什么含义

macrojj 2010-01-24
  • 打赏
  • 举报
回复
的确好晕哦。。。。
要考虑 什么情况下
p="大家好"; 是真的改变了
fox000002 2010-01-24
  • 打赏
  • 举报
回复
lz 需要考虑 xx=="大家好"; 到底修改的什么
cattycat 2010-01-24
  • 打赏
  • 举报
回复
使用引用对改变了a[1]的指针指向的位置,指向新的字符串常量 大家好
cocat 2010-01-24
  • 打赏
  • 举报
回复
恩~是我理解错了
stardust20 2010-01-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 cocat 的回复:]
引用 8 楼 mhbfku1994 的回复:
你把char*&当作一个类型来看啊,不就轻松多了,想得太复杂了,两边要配对就好了,引用就是个变量的别名.

不失为一个办法,但是不是特别严谨的样子

第二个中的
char* &getPointer(int index)
{
  return a[index];
}

在main函数中直接就用
getPointer(1)="大家好";
这样就能改变数组里面的数是为什么啊?
[/Quote]
这边改变的不是数组里面的数。。而是让a指向"大家好"存的地方
cocat 2010-01-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 mhbfku1994 的回复:]
你把char*&当作一个类型来看啊,不就轻松多了,想得太复杂了,两边要配对就好了,引用就是个变量的别名.
[/Quote]
不失为一个办法,但是不是特别严谨的样子

第二个中的
char* &getPointer(int index)
{
return a[index];
}

在main函数中直接就用
getPointer(1)="大家好";
这样就能改变数组里面的数是为什么啊?
mhbfku1994 2010-01-24
  • 打赏
  • 举报
回复
你把char*&当作一个类型来看啊,不就轻松多了,想得太复杂了,两边要配对就好了,引用就是个变量的别名.
stardust20 2010-01-24
  • 打赏
  • 举报
回复
char* p=getPointer(1);
这边只是让p和a指向相同的地方
p="大家好"; 让p指向别的地方
所以并不会影响到a(除了p和a指向相同的地方外没有其它关系了)


char* &p=getPointer(1);//这里又加个引用,为什么可以?
这边可以把p当成a的别名来理解,
p="大家好";
这边修改了p的指向,p是a的别名,也就是可以说这边是修改了a

cocat 2010-01-24
  • 打赏
  • 举报
回复
我错了,第一个发错了,是这样的~的确搞得乱乱的

//1.cpp
#include<iostream>
using namespace std;

char* a[3]={"早上好","下午好","晚上好"};
char* getPointer(int index)/
{
return a[index];
}
void travel()
{
for(int i=0;i<3;i++)
{
cout<<a[i]<<' ';
}
cout<<endl;
}
int main()
{
char* p=getPointer(1);
p="大家好";
travel();
return 0;
}

64,648

社区成员

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

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