函数入参使用指针和引用的区别
2018-06-18 03:53:23来源:未知 阅读 ()
最近做一个工具,在整改函数时需要给一个全局变量赋值
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上
通过以上可以总结出:尽量少用引用作为左值,如果需要通过函数参数来赋值(出参),最好使用临时指针变量来获取地址,再赋值给需要的变量
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:哈希表详解
- C++ 转换函数搭配友元函数 2020-06-10
- C++ rand函数 2020-06-10
- C++ 友元函数 2020-06-10
- C++ const成员函数 2020-06-03
- C++ 析构函数 2020-06-03
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash