把指向数组的指针赋为NULL

eks_222 2008-06-18 01:46:26
定义一个一维数组,如果要把数组的最后一位赋位空要怎么操作?

#include<iostream.h>
int main()
{
int temp[50];
for(int k=0;k<50;k++)
{
temp[k]=k;
cout<<temp[k]<<ends;
}
cout<<*(temp+49)<<endl;
(temp+49)=NULL;
for(int k=0;k<49;k++)
{
cout<<temp[k]<<ends;
}


}

本来以为这样能行,结果编译不了
显示的错误是--------------------Configuration: asdfasdf - Win32 Debug--------------------
Compiling...
asdfasdf.cpp
F:\c++\试用文件夹\asdfasdf.cpp(11) : error C2106: '=' : left operand must be l-value
执行 cl.exe 时出错.

asdfasdf.obj - 1 error(s), 0 warning(s)
那个temp+49不是指向第50个元素的指针吗?
...全文
399 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
eks_222 2008-06-18
  • 打赏
  • 举报
回复

thanks
我不是这个意思,就是,如果不是一个常量而是一个变量,变量在之前的代码程序里面已经确定的,比如temp+j
要怎么操作
richbirdandy 2008-06-18
  • 打赏
  • 举报
回复
这里(temp+j)不能赋值
*(temp+j)可以赋值
不管j是变量还是常量
lz要理解数组名与指针的关系
http://topic.csdn.net/u/20080608/21/12a02aab-ce19-4e9c-8e75-6f09da4144f3.html
此帖可参考
richbirdandy 2008-06-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 eks_222 的回复:]
谢谢了
问题解决
不过我还有个问题就是
如果比如上面的49不是一个常数
而是一个变量
但是变量在上面的代码里面已经确定
是否还可以这样操作
error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'const int' (or there is no acceptable conversion)
这个是什么意思

回答这个问题没分....分要给楼上的人....
希望帮忙....
[/Quote]
49是文字常量 不是变量
richbirdandy 2008-06-18
  • 打赏
  • 举报
回复
(temp+49)是个临时变量 不能当作左值
另外temp可以理解指针常量 不能被赋值
eks_222 2008-06-18
  • 打赏
  • 举报
回复
谢谢了
问题解决
不过我还有个问题就是
如果比如上面的49不是一个常数
而是一个变量
但是变量在上面的代码里面已经确定
是否还可以这样操作
error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'const int' (or there is no acceptable conversion)
这个是什么意思

回答这个问题没分....分要给楼上的人....
希望帮忙....
richbirdandy 2008-06-18
  • 打赏
  • 举报
回复
数组的最后一位赋位空 当然可以实现
所谓NULL 就是#define NULL 0
以下代码在VS2005通过编译

int main()
{
int temp[50];
for(int k=0;k<50;k++)
{
temp[k]=k;
cout<<temp[k]<<ends;
}
cout<<*(temp+49)<<endl;
*(temp+49)=NULL;//就这里改了下
for(int k=0;k<49;k++)
{
cout<<temp[k]<<ends;
}


}
eks_222 2008-06-18
  • 打赏
  • 举报
回复
谢谢咯~~~~~~
如果是动态存储的
我可以把数组的最后一位给赋空吗?
visame 2008-06-18
  • 打赏
  • 举报
回复
F:\c++\试用文件夹\asdfasdf.cpp(11) : error C2106: '=' : left operand must be l-value
执行 cl.exe 时出错.

asdfasdf.obj - 1 error(s), 0 warning(s)
那个temp+49不是指向第50个元素的指针吗?


上面的错误信息已经很明确了:temp+49是右值,不能被赋值的。
“如果要把数组的最后一位赋位空”是不能被实现的。
最多只能*(temp+49)=-1;

64,683

社区成员

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

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