首页 > 解决方案 > 动态内存分配表现怪异

问题描述

我刚刚发现我不能写这样的代码

#include <iostream>

using namespace std;

int main() 
{
  int* a, b;
  int N;
  cin >> N;

  a = new int[N];
  b = new int[N];
}

但我不明白为什么:

  int*a, b;

错了,什么是b类型?

标签: c++arraysdynamic

解决方案


将我的评论作为答案:

bs 类型是int,不是int*你想象的那样。这是不在同一行声明多个变量的一个很好的理由。在单行上执行此操作的正确方法是int *a, *b;

如果您想了解更多,这里列出了规则。在您的示例int中,在decl-specifier-seq类别中并且*a, *binit-declarator-list类别中。

最好的方法当然是在声明变量时初始化变量以避免潜在的错误:

int main() {
    int N = 0;
    std::cin >> N;
    int* a = new int[N];
    int* b = new int[N];

    //dont forget to delete
    delete[] a;
    delete[] b;
    return 0;
}

推荐阅读