首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在C++中从指向数组的指针访问值

如何在C++中从指向数组的指针访问值
EN

Stack Overflow用户
提问于 2021-09-25 21:29:55
回答 2查看 116关注 0票数 0

我正在使用解引用运算符,但是我似乎没有得到x的值。

代码语言:javascript
运行
复制
#include <iostream>
using namespace std;

class Array {

  public:
  int* get() {
      int x[] = { 31, 45, 39, 32, 9, 23, 75, 80, 62, 9 }; 

      int *r;
      r = x;
      return r;
  }
};

int main() {
  Array arr;

  int *temp = arr.get();

  for (int i = 0; i < 10; ++i) {
    cout << temp[i] << " ";
  }
}

这将打印出31 32765 0 0 0 -1989689609 32624 -989639072 32765,而不是31 45 39 32 9 23 75 80 62 9

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-25 21:47:30

当堆栈上分配的变量超出作用域时,它就会被销毁。在您的示例函数Array::get

代码语言:javascript
运行
复制
  int* get() {
      int x[] = { 31, 45, 39, 32, 9, 23, 75, 80, 62, 9 }; 

      int *r;
      r = x;
      return r;
  }

变量x被销毁。如果不希望发生这种情况,可以使用static关键字static int x[] = ...标记变量,或者在堆int* x = new int[10]上分配它。如果您使用后者,请确保在不再使用内存时将其释放或使用智能指针。

票数 1
EN

Stack Overflow用户

发布于 2021-09-29 08:58:47

您需要将其定义为class的私有成员

代码语言:javascript
运行
复制
private:
    int x[] = { 31, 45, 39, 32, 9, 23, 75, 80, 62, 9 }; 

或者在函数内部设置为静态

代码语言:javascript
运行
复制
static int x[] = { 31, 45, 39, 32, 9, 23, 75, 80, 62, 9 }; 

在这两种情况下,这个x数组都将持续存在,并且您将能够从中获取值。否则,您的Get函数将只返回数组的第一个成员,当退出该函数的作用域时,其他成员将被清除。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69330184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档