【问题标题】:Accessing the pointers of a static function访问静态函数的指针
【发布时间】:2021-06-20 12:16:58
【问题描述】:

我是 C 和 C++ 的新手。我已经定义了一个具有指针'ptr'的静态函数。如何访问函数外的指针?

#include <iostream>

using namespace std;

static void accessArr(uint8_t arr[]);

int main()
{
    uint8_t arr[] = {1,2,3,4,5};

    accessArr(arr);
    
    cout << *ptr <<endl;
    return 0;
}

void accessArr(uint8_t arr[])
{
    uint8_t *ptr = arr;
}

我收到上述代码的以下错误。请帮助解决错误。

main.cpp:12:14: error: ‘ptr’ was not declared in this scope

     cout << *ptr <<endl;
              ^~~

【问题讨论】:

  • cout &lt;&lt; arr[0] &lt;&lt;endl;?不清楚为什么要使用另一个函数的本地变量。
  • 函数内部的局部变量无论如何都是局部变量。它们的作用域和生命周期对于统计函数和非静态函数都遵循相同的规则。
  • @churill 不,我想使用指针'ptr'打印'arr'数组的第一个元素
  • 您不能这样做,因为ptraccessArr 的局部变量。解决方法是从accessArr 调用某些函数,传递指向ptr 的指针或引用。
  • C++ 不是这样工作的。函数变量始终只能从函数内部访问。

标签: c++ arrays function pointers


【解决方案1】:

名称 ptr 未在 main 中声明且可见。只需将函数声明为返回一个指针,例如

static uint8_t * accessArr(uint8_t arr[])
{
    return arr;
}

在 main 你可以写

cout << *accessArr( arr ) <<endl;

或者

uint8_t *ptr = accessArr( arr );

cout << *ptr <<endl;

【讨论】:

  • 我认为这是我见过的最没用的功能,但它正确地解决了问题。 +1
  • 即使看起来微不足道,但我认为初学者确实需要这样的答案,因为许多人会不明白从哪里开始。即使不推荐,您甚至可以添加关于输出参数或全局变量的部分,以便初学者知道什么是可能的,什么是应该避免的。
【解决方案2】:

arr 指的是第一个元素的地址?如果你需要arr地址就写&arr

【讨论】:

  • 我想我知道您要了解什么,但arr 指的是整个数组,而不仅仅是第一个元素。 arrdecay 指向指向第一个元素的指针,但 arr 将是并且仍然是数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
相关资源
最近更新 更多