在C ++函数中通过指针返回参数

时间:2015-10-08 17:10:57

标签: c++ visual-c++

我有以下类型定义。

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
}

3 个答案:

答案 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;
}