可是为什么编绎时出错了?

dedema 2001-12-23 09:55:10
#include "iostream.h"
{int a[]={2,4,6,8,10,12};
int *index(int i)
{return &a[i];}

int index1(int i)
{return *index(i);}

void main()
{ index1(3)=123;//本行去掉就可以通过编绎!
cout<<index1(3)<<endl;
}
我费尽心机,才想出一个函数表达式用在赋值表达式的左边的程序,可是为什么编绎时出错了?
注意,这里想办法不用“引用”的吧!
...全文
56 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ttzzgg_80713 2002-07-12
  • 打赏
  • 举报
回复
faint
xiesl 2002-07-12
  • 打赏
  • 举报
回复
你的index返回的是一个指针,所以是可以赋值到其所指地址的。
indexl返回的是一个临时变量,这个临时变量保存的是index返回指针所指的值,这个值是不能被赋值的,如果你给它赋值,就相当于你写了这样一句:3=4;
要实现函数赋值的形式,可以这样:
* index(3)=345;
fangrk 2002-07-12
  • 打赏
  • 举报
回复
#include "iostream.h"
int a[]={2,4,6,8,10,12};

int& index1(int i)
{return a[i];}

void main()
{ index1(3)=123;
cout<<index1(3)<<endl;
}
alidiedie 2002-07-12
  • 打赏
  • 举报
回复
函数返回值是不能作为左值的.
alidiedie 2002-07-12
  • 打赏
  • 举报
回复
函数返回值是不能作为左值的.
oustar 2002-07-12
  • 打赏
  • 举报
回复
返回的仅仅是值,值所存放的内存,不受你的控制。
jjhon 2001-12-23
  • 打赏
  • 举报
回复
index1()返回值无法作为左值(lvalue)
index1()返回的只是一个临时变量
若改成
void main()
{*index(3)=123;//注意
cout<<index1(3)<<endl;
}
即可通过
hello_wyq 2001-12-23
  • 打赏
  • 举报
回复
返回的是一个临时变量,可能编译器有警告吧!
另外,现在的编译器大多数把临时变量用const修饰,如果你这样的话,也有可能是一个错误,告诉你常量不能被赋值之类的错误提示:)

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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