请问个关于全局指针的问题,求教

xiaochi95 2011-07-24 06:15:42
class Book
{
public:
int num;
float price;
Book *next;
};

Book *head = NULL;//这里定义的指针

Book *creat()
{
............//创建结点
}

void show(Book *head)
{
while(head)
{
cout<<head->num<<"\t"<<head->price<<endl;
head = head->next;//在这里传入函数后,head指针以经后移,其地址已经改变
}
}

int main()
{
head = creat();//创建多个结点后,返回头结点
show(head);//调用完结束后,为什么head指针又指向头结点了,这个不是按地址传递吗,其地址应该移到最后的结点
}

跟踪看了,就是不明白,这里返回主调函数的时候为什么指针自动变回头指针了,在调用show()函数时不是已经改变地址了吗,这是按地址传递的啊.
是不是全局区和栈区的关系,具体怎么实现的,请大哥们给讲讲,多谢了,本人新手
...全文
91 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaochi95 2011-07-24
  • 打赏
  • 举报
回复
嗯.谢谢上面两位大哥..
黑娃 2011-07-24
  • 打赏
  • 举报
回复
补充下,以上和全局什么的无关,函数形参只要不是引用都会被复制,即便是指针也会被复制,所以你在show中改变指针是不能反映到主函数中的,但你若改变了指针指向的内容,则可以反映到主函数中。
黑娃 2011-07-24
  • 打赏
  • 举报
回复
int main()
{
head = creat();//的确返回了头结点的地址
show(head);//show函数中改变的是head的复制品,主函数中的head在show调用前后都没有被改变
}
CrazyBW 2011-07-24
  • 打赏
  • 举报
回复
这样啊楼主,我觉着是这么回事,首先按地址传递说的是指针指向的内存,也就是说,在你这个程序里面,函数里指针是临时变量,但是你要修改指针所指向的内存,那么这块内存内所存储的东西会被改变!而你传递进去的指针却是临时变量,当你修改这个指针的地址的时候,不会影响的主函数中的head!
xiaochi95 2011-07-24
  • 打赏
  • 举报
回复
按地址传递,实参和形参不是指向同一个内存区域吗?
至善者善之敌 2011-07-24
  • 打赏
  • 举报
回复
楼主放全部代码看看吧
jernymy 2011-07-24
  • 打赏
  • 举报
回复
楼主了解一下形参和实参的知识和用法就知道为啥滴了
xiaochi95 2011-07-24
  • 打赏
  • 举报
回复
难道传入的指针和全局的指针不是一个指针?

64,282

社区成员

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

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