*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;
}
}
...全文
124 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); /* 修改指针本身的值 */
基于改进多目标灰狼优化算法的考虑V2G技术的风、光、荷、储微网多目标日前优化调度研究(Matlab代码实现)内容概要:本文围绕“基于改进多目标灰狼优化算法的考虑V2G技术的风、光、荷、储微网多目标日前优化调度”展开研究,提出了一种结合车辆到电网(V2G)技术的微电网优化调度模型,涵盖风电、光伏、负荷及储能系统。通过引入改进的多目标灰狼优化算法(MOGWO),实现对微网系统经济性、环保性和可靠性等多重目标的协同优化,有效应对可再生能源出力波动与负荷不确定性。研究在Matlab平台上完成代码实现,并通过仿真验证了所提方法在降低运行成本、减少碳排放和提升能源利用率方面的优越性能。; 适合人群:具备一定电力系统、优化算法和Matlab编程基础的研究生、科研人员及从事新能源微网系统优化调度工作的工程技术人员。; 使用场景及目标:①用于微电网多目标优化调度的研究与仿真;②为含V2G技术的综合能源系统提供优化解决方案;③支持学术论文复现、科研项目开发及实际工程方案设计。; 阅读建议:建议结合Matlab代码进行实践操作,重点关注算法改进策略与微网模型构建的细节,同时可参考文中涉及的其他优化方法与应用场景,拓展研究思路。

70,036

社区成员

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

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