最近做一个工具,在整改函数时需要给一个全局变量赋值
RadixNode *g_pstRootBase
赋值的来源为已定义的结构体:TreeSet treeSet = {0}中的trSet->tNameSet[i].tName地址(其中i为变量。
以下是trSet结构体的定义:
typedef struct tagTreeName { RadixNode *tName; char *fName; }TreeName; typedef struct tagTreeSet { TreeName tNameSet[MAX_SYMBOL_TREE_NUM]; int realNum; }TreeSet;
因为其他处理的需要,写了个函数,函数原型为:
int setTreeName(TreeSet *trSet, RadixNode **tName)
想通过第二个入参tName将trSet->tNameSet[i].tName的地址赋值给g_pstRootBase(函数有删减)
传参方式为:setTreeName(&trSet, &g_pstRootBase),内部处理如下
int setTreeName(TreeSet *trSet, RadixNode **tName) {
tName = &trSet->tNameSet[i].tName; }
}
但在调试的时候发现g_pstRootBase并没有赋值成功,即g_pstRootBase仍然是初始值
分析一下才发现&g_pstRootBase的意思是的g_pstRootBase地址,并不是一个真正的指针变量,可以认为就是一个地址常数!
修改函数中对g_pstRootBase的赋值方式如下:
int setTreeName(TreeSet *trSet, RadixNode **tName) {
*tName = (RadixNode*)(&trSet->tNameSet[i].tName); }
}
这样程序就可以正常运行了,即将&trSet->tNameSet[i].tName的地址赋值到地址*tName上
通过以上可以总结出:尽量少用引用作为左值,如果需要通过函数参数来赋值(出参),最好使用临时指针变量来获取地址,再赋值给需要的变量
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有