指针的问题,达人指教

supercalvin 2006-03-23 01:21:59
int foobar( int *pi ) {
*pi = 1024;
return *pi;
}
int main() {
int *pi2 = 0;
int ival = foobar( pi2 );
return 0;
}

这个函数会有问题么?为什么呢?
希望达人指教了。
...全文
126 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
supercalvin 2006-03-23
  • 打赏
  • 举报
回复
多谢各位。
ChenSu2008 2006-03-23
  • 打赏
  • 举报
回复
int *pi2 = 0;
这个是声明一个指针,它的值是0;
没有指向某个地方。

在函数中的赋值
*pi = 1024;不合法。(把指针指向的地址存储值1024)

呵呵,当然因为地址为0的地方你的程序是不能进行访问的。

你可以
int iVal = 0;
int *pi2 = &iVal ;
Torrice 2006-03-23
  • 打赏
  • 举报
回复
int foobar( int *pi ) {
*pi = 1024;
return *pi;
}
int main() {
int *pi2 = 0;
int ival = foobar( pi2 ); --->地址传递
return 0;
}


pi2中存储的是四个字节的地址
popy007 2006-03-23
  • 打赏
  • 举报
回复
int *pi2 = 0;

这是个空指针。传入

int foobar( int *pi ) {
*pi = 1024;
return *pi;
}

由于没有对pi的合法判断,因此对空指针进行了操作。

可以增加一个相对安全些的判断:

int foobar( int *pi ) {
if(pi) {
*pi = 1024;
return *pi;
}
return 0;
}
逸学堂 2006-03-23
  • 打赏
  • 举报
回复
int *pi2 = 0; // 这时得0是指针为空,而不是指针值为空。
int ival = foobar( pi2 );
上面得应用相当于给一个空指针赋值,所以肯定会产生运行时刻错误。就像
int *pi2 = 0;
*pi2 = 1;
一样得错误。

修改如下就没有问题
int i = 0;
int *pi2 = i;
int ival = foobar( pi2 );
xiaocai0001 2006-03-23
  • 打赏
  • 举报
回复
当然会有问题了.
指针没有指向空间就使用,会出问题了.
ChenSu2008 2006-03-23
  • 打赏
  • 举报
回复
指针没有指向已被申请空间

64,649

社区成员

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

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