C++ 如何创建一个需要输入大小的数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 如何创建一个需要输入大小的数组相关的知识,希望对你有一定的参考价值。

就是实现不知道需要分配多少内存,通过输入才知道数组大小

参考技术A 用new可以实现,如下面新建一个输入大小的数组
#include <iostream>
using namespace std;
int main(int argc, char *argv[])

int a;
cout << "请输入新建数组的大小:" << endl;
cin >> a;
char *p = new char[a];

delete []p;
return 0;

新建的数组(其他用new生成的 也一样)不再使用,要用delete删除掉。
参考技术B 用1楼的例子就行 C++的话 就看那个new 和delete运算符的例子 参考技术C int *p;
int n;//数组大小
cin>>n;
p=new int[n];
...
delete []p;

或者
p=(int *)malloc(n*sizeof(int));
...
free(p);

或者
p=(int *)calloc(n*sizeof(int));
...
free(p);本回答被提问者采纳
参考技术D 对 就这样 第5个回答  2009-07-12 用动态内存分配。你是不是还没有学到这里?学到了你就知道该怎么做了。这个后面是肯定要学到的。楼上的给出了一个动态声明数组了例子。

(C++) 创建可以从函数访问的动态全局数组/向量

【中文标题】(C++) 创建可以从函数访问的动态全局数组/向量【英文标题】:(C++) Create dynamic global array/vector that can be accessed from functions 【发布时间】:2017-04-15 11:55:36 【问题描述】:

我正在为地牢游戏编写代码。地牢是一个简单的正方形字符数组。在实际版本中,数组的大小和敌人的数量等都是用“#Define”声明的,但我想稍微改进一下程序并让用户设置高度,宽度,敌人数量... 问题是我不知道如何以用户输入大小的方式声明数组,同时数组是 global 并且可以由我的所有函数访问使用 (#define) 编写。 我愿意接受任何不涉及重写所有函数的建议:)

**此刻,数组的声明为:

    #define WIDTH  20
    #define HEIGHT 20
    char dun[HEIGHT][WIDTH];

**代码链接:https://github.com/Zashuiba/The-Dungeon-Game/blob/master/Dungeon/Dungeon.cpp

【问题讨论】:

standard vector class 有什么问题? 【参考方案1】:
#include <vector>

您可能想为此使用std::vector 类。这是一个快速草稿代码:

size_t width = 20;
size_t height = 20;
std::vector< std::vector<char> > dun;

void init_array()

    dun.resize(height);
    for (size_t i = 0; i < height; ++i)
        dun[i].resize(width);

【讨论】:

好吧,我不得不承认我有点爱你:)。现在完美运行,你能解释一下“size_t”和“resize”是什么意思吗? size_t 是架构大小的无符号整数类型(与指针大小相同)。 “std::size_t 可以存储任何类型的理论上可能的对象的最大尺寸”(en.cppreference.com/w/cpp/types/size_t) resize 在堆中动态分配数组。如果不这样做,数组有0个元素,访问会产生分段错误(访问非法地址)。【参考方案2】:

将 dun 设为向量的向量

#include<vector>

std::vector<std::vector<char>> dun; //global variable

//In your input function
input_from_user()

    int Height = getHeight();
    int width  = getWidth();
    dun.clear();
    for(int i = 0 ; i < Height ; ++i)
    
        std::vector<char> createdVector(Width);
        dun.push_back(createdVector);
    

现在您可以像使用二维 char 数组一样使用 dun,因为 std::vector 重载了下标运算符

【讨论】:

以上是关于C++ 如何创建一个需要输入大小的数组的主要内容,如果未能解决你的问题,请参考以下文章

C++问题:如何定义一个未知大小的一维数组,数组大小由输入的值决定

如何从另一个函数访问布尔数组? C++

数组大小超过函数大小 (C++)

matlab如何创建多维数组

(C++) 创建可以从函数访问的动态全局数组/向量

如何在C++中创建一维动态数组