我有以下类型定义。
typedef USHORT HSERVICE;
typedef HSERVICE * LPHSERVICE;
按任务我必须使用 LPHSERVICE 来获取值10.并且无法更改。
我需要帮助才能做到。谢谢!
C ++代码
typedef USHORT HSERVICE;
typedef HSERVICE * LPHSERVICE;
void func(LPHSERVICE lphService);
int main()
{
LPHSERVICE lphService;
func(lphService);
// I need to see 10 in lphService
return 0;
}
void func(LPHSERVICE lphService)
{
HSERVICE hService;
hService = 10;
lphService = &hService; // Not working
}
答案 0 :(得分:1)
LPHSERVICE
是指针类型,因此您可以直接写入:
void func(LPHSERVICE lphService)
{
*lphService = 10;
}
但是这会崩溃,因为main
没有分配HSERVICE
,因此必须更改为:
int main(int argc, char * argv[])
{
HSERVICE hService;
LPHSERVICE lphService = &hService;
func(lphService);
// I need to see 10 in lphService
return 0;
}
答案 1 :(得分:1)
使用整数进行模拟,这是你应该做的。 您的代码存在一些问题:
1 - 您无法指向局部变量,因为它的地址在函数结尾时将变为无效。
要将变量保留在函数内部,必须将其放在堆上,然后获取其地址。
(请注意主要结束时对free()
的调用)
2 - 只是因为你正在使用指针,这并不意味着你可以在函数内部改变其内容并且更改将反映在外部,你必须提供指针的地址。
typedef int HSERVICE;
typedef int* LPHSERVICE;
void func(LPHSERVICE*);
int main()
{
LPHSERVICE lphService = 0;
func(&lphService);
printf("%d", *lphService);
delete lphService;
return 0;
}
void func(LPHSERVICE* lphService)
{
HSERVICE* hService = new HSERVICE;
*hService = 10;
*lphService = hService;
}
答案 2 :(得分:0)
嗯......我发现解决方案运行正常。
typedef USHORT HSERVICE;
typedef HSERVICE * LPHSERVICE;
void func(LPHSERVICE &lphService, HSERVICE hService);
int main()
{
HSERVICE hService;
hService = 0;
LPHSERVICE lphService;
func(lphService, hService);
int d;
d = *lphService;
return 0;
}
void func(LPHSERVICE &lphService, HSERVICE hService)
{
hService = 10;
lphService = &hService;
}