【问题标题】:Creating a global dynamically-allocted array创建全局动态分配数组
【发布时间】:2013-02-06 22:01:20
【问题描述】:

我是 C/C++ 新手,我有一个关于动态分配数组的问题。你不能做一个全局动态分配的数组吗?如果我想让 arr 被多个函数使用怎么办?我必须将 arr 传递给每个函数吗?基本上我想我仍然对动态分配数组的概念以及如何创建一个可由几个函数使用的数组感到困惑。

以下产生:错误:'arr' 没有命名类型,但我不确定具体原因。

#include <iostream>      

using namespace std;

int * arr = NULL;
arr = new int [10];

int main() {
   arr[0] = 1;
   return 0;
}

【问题讨论】:

  • @jrok:C 语法不是这样工作的
  • @Eric 你是绝对正确的。 C 没有new :)
  • “全局”和“动态分配”实际上是相互排斥的。全局变量具有静态存储,动态分配的具有动态存储。您当然可以拥有一个全局指针动态分配的对象。
  • 哦 :) 好吧,这是一个错字,挑剔者。无论如何,谢谢你指出来:)
  • @jrok: 挑剔是 awesome :P

标签: c++


【解决方案1】:

那是无效的,原因与它无效的原因相同

#include <iostream>      

using namespace std;

int a = 0;
a = 2;

int main() {

}

您不能在函数之外运行语句,只能运行初始化程序。因此,这是可行的:

#include <iostream>      

using namespace std;

int *arr = new int[10];

int main() {
   arr[0] = 1;
   return 0;
}

【讨论】:

    【解决方案2】:

    您甚至不必使数组动态化,您只需将数组放在 main 外部的静态内存中,它就会与程序一样长。

    #include <iostream>     
    
    int arr[10];
    
    int main() {
       arr[0] = 1;
       return 0;
    }
    

    【讨论】:

      【解决方案3】:
      int* arr = new int[10];
      

      或者(因为你分配了一个固定大小的数组):

      int arr[10];
      

      【讨论】:

        【解决方案4】:

        你不能在函数之外有“代码”。您需要将对new 的调用放在一个函数中——您的代码中只有一个:main,但只要它是在您访问数组之前执行的函数,就可以了。

        正如评论所说,您也可以执行int *arr = new int[10]; - 只要它是初始化的一部分,而不是单独一行。

        【讨论】:

        • int *arr = new int[10] 在全局范围内完全有效。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-17
        • 1970-01-01
        • 2011-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-18
        相关资源
        最近更新 更多