【问题标题】:problems with allocation an array with main argoment type分配具有主要参数类型的数组的问题
【发布时间】:2017-07-27 08:39:53
【问题描述】:

我应该创建一个主要参数为 “int main(int argc,char* argve[])” 第一个是数组的类型(可以是“int/long/char”),第二个是大小,我需要根据选择的类型分配数组 我很容易用 atoi 功能得到尺寸 但无法弄清楚如何将类型转换为所选类型的正确指针 我根本不明白这种铸造是如何工作的,以及如何正确地为每种类型铸造它,
有什么正确的解释吗?

这就是我到目前为止所得到的

int main(int argc, char* argv[])
{
    int size = atoi(argv[2]);


    if (strcmp(argv[1], "int") == 0)
    {
        int* arr = nullptr;
    }
    if (strcmp(argv[1], "long") == 0)
    {
        long* arr = nullptr;
    }
    if (strcmp(argv[1], "char") == 0)
    {
        char* arr = nullptr;
    }

}

【问题讨论】:

  • 你没有演员表!你应该定义void* arr吗?这是一个非常糟糕的任务。 YAIT(又一个不称职的老师)

标签: c++ casting dynamic-allocation


【解决方案1】:

您可以使用template 创建一个新函数并从main 调用它:

template <class T>
int realmain(int size)
{
    T *arr = new T[size];
    //whatever you want to do

    delete []arr;
    return 0;
}

int main(int argc, char* argv[])
{
    int size = atoi(argv[2]);


    if (strcmp(argv[1], "int") == 0)
    {
        return realmain<int>(size);
    }
    if (strcmp(argv[1], "long") == 0)
    {
        return realmain<long>(size);
    }
    if (strcmp(argv[1], "char") == 0)
    {
        return realmain<char>(size);
    }
}

【讨论】:

  • 但是我如何将数组放到主要的 agian 上?
  • 你不必,在main做任何你想做的事,在realmain做(你可以根据任务选择更好的名字)。
  • 我了解您的解决方案,但我需要自己掌握 arr 并继续在其他功能上使用它
【解决方案2】:

由于变量的作用域,它可以工作。您的 3 个 arr 变量的块作用域为 3 个不同的块,因此即使它们具有相同的名称,编译器也会将它们视为 3 个不同的变量,因此它们属于不同的类型感觉很好。

话虽如此,在现实世界的代码中这并不是一个好的做法,因为这给人类阅读者增加了不必要的复杂性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 2021-11-12
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 2019-02-21
    相关资源
    最近更新 更多