*pVal = r->data; /* 为什么pVal = &(r->data)不行 */

猪头小哥 2012-02-20 09:46:15
RT
int PopStack(PSTACK pS,int *pVal)
{
if (Isempty(pS))
{
printf("栈已为空,出栈失败!\n");
return FALSE;
}
else
{
PNODE r = pS->pTop;
pS->pTop = r->pNext;
*pVal = r->data; /* 为什么pVal = &(r->data)不行 */
free(r);
r = NULL;

return TRUE;
}
}
...全文
82 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
猪头小哥 2012-02-20
  • 打赏
  • 举报
回复
嗯嗯 明白了 其实其实多深入想想就明白了~~
[Quote=引用 9 楼 redshiliu 的回复:]

引用 5 楼 zhutou100hao 的回复:

那个不是都赋值了么?pVal还受影响吗?
引用 3 楼 aiyang301 的回复:

貌似与free(r)有关。
如果pVal = &(r->data),那么free(r)后,pVal在何处?


还需要多多理解下指针
函数外部你的int变量是A,隐含一个常量指针ca=&A,假设为0x123……
[/Quote]
redshiliu 2012-02-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhutou100hao 的回复:]

那个不是都赋值了么?pVal还受影响吗?
引用 3 楼 aiyang301 的回复:

貌似与free(r)有关。
如果pVal = &(r->data),那么free(r)后,pVal在何处?
[/Quote]

还需要多多理解下指针
函数外部你的int变量是A,隐含一个常量指针ca=&A,假设为0x12345,你调用函数PopStack(...,&A)
到了函数内部int *pVal变量复制了变量A的地址即pVal=0x12345
pVal=&(r->data)这句的作用就是将pVal的地址改变了假设为0x12388,
函数调用结束后pVal也就释放了,根本没有影响到任何事情。

jzxsasch 2012-02-20
  • 打赏
  • 举报
回复 1
参数传递是通过栈来传的,当那个参数是指针的时候,传递的是地址空间,在栈上的值是指针。
pVal = &(r->data)的话只是把栈上的值改变了,函数退出自动清栈,
*pVal = r->data; 的话是把栈上指向地址的值改变了。
猪头小哥 2012-02-20
  • 打赏
  • 举报
回复
嗯嗯 明白了~~~
[Quote=引用 6 楼 aiyang301 的回复:]

引用 4 楼 zhutou100hao 的回复:
我的目的还是是输出val那个值啊,这样不行?


引用 1 楼 mymtom 的回复:

*pVal = r->data; /* 修改指针指向的内存单元的值 */
pVal = &(r->data); /* 修改指针本身的值 */


free(r)后,pVal指空,在去获取其值,是不是非法了。
[/Quote]
aiyang301 2012-02-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhutou100hao 的回复:]
我的目的还是是输出val那个值啊,这样不行?


引用 1 楼 mymtom 的回复:

*pVal = r->data; /* 修改指针指向的内存单元的值 */
pVal = &(r->data); /* 修改指针本身的值 */
[/Quote]

free(r)后,pVal指空,在去获取其值,是不是非法了。
猪头小哥 2012-02-20
  • 打赏
  • 举报
回复
那个不是都赋值了么?pVal还受影响吗?
[Quote=引用 3 楼 aiyang301 的回复:]

貌似与free(r)有关。
如果pVal = &(r->data),那么free(r)后,pVal在何处?
[/Quote]
猪头小哥 2012-02-20
  • 打赏
  • 举报
回复
我的目的还是是输出val那个值啊,这样不行?

[Quote=引用 1 楼 mymtom 的回复:]

*pVal = r->data; /* 修改指针指向的内存单元的值 */
pVal = &(r->data); /* 修改指针本身的值 */
[/Quote]
aiyang301 2012-02-20
  • 打赏
  • 举报
回复
貌似与free(r)有关。
如果pVal = &(r->data),那么free(r)后,pVal在何处?
ProgrammingRing 2012-02-20
  • 打赏
  • 举报
回复
*pVal是指向地址的值……
mymtom 2012-02-20
  • 打赏
  • 举报
回复
*pVal = r->data; /* 修改指针指向的内存单元的值 */
pVal = &(r->data); /* 修改指针本身的值 */

69,371

社区成员

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

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