【问题标题】:static array in c# vs c/c++c# vs c/c++中的静态数组
【发布时间】:2010-11-19 17:03:23
【问题描述】:

这段代码在 C# 中是正确的

int x = int.Parse(Console.ReadLine());
        int[] t = new int[x];

但是在 c/c++ 中 错了

int n;  scanf("%d",&n);  int a[n];

c#静态数组如何在运行时分配(或者c#数组是动态的?)

【问题讨论】:

  • 你应该接受你的问题的答案。
  • 这是 SO 的工作原理。您提出问题,我们将尽我们所能回答。当您收到您喜欢的答案时,请单击该答案旁边的向上箭头 ^ 进行投票。提供的答案之一将是您特定情况的最佳答案。您应该通过单击该答案旁边的复选标记来“接受”而不是回答。当您投票或接受答案时,回答者会因他们的努力而获得“声誉积分”,这是驱动网站的货币。你问了很多问题,但从未接受任何答案。请返回并接受答案
  • 我不确定我是否理解您在这里要问的问题。你能澄清一下吗?

标签: c# c++ arrays


【解决方案1】:

C# 数组在运行时在堆上分配。

C 数组在编译时分配在堆栈上。
C 还可以在运行时使用malloc 分配数组。 (完成后记得free他们)

【讨论】:

  • “记住”是发明许多编程语言的原因;)
  • 需要注意的是,如果malloc 在 C++ 中的地位相当低。 (如果您真的知道自己在做什么并且正在做微优化,这可能会很有趣,否则)您应该改用new。而且您可能也不应该使用裸阵列(除非您有充分的理由)。事实上,C++(大部分)是 C 的超集,这意味着在 C++ 中你可以在 C 中做任何你能做的事情,但你真的不应该。
【解决方案2】:

在 c++ 中,您需要这样做:

int* a = new int[n];

// Do stuff with the array

delete[] a;

【讨论】:

    【解决方案3】:

    但是在 c/c++ 中出错了

    int n; scanf("%d",&n); int a[n]

    不!在 C99 中,此代码是正确的,因为 C99 支持可变长度数组 (VLA)。
    在 C++ 中,代码格式错误,因为数组大小必须是 C++ 中的常量表达式(尽管 g++ 支持 VLA 作为扩展)。

    【讨论】:

      猜你喜欢
      • 2012-05-09
      • 1970-01-01
      • 2015-06-23
      • 2013-12-03
      • 2010-10-07
      • 1970-01-01
      • 2013-07-20
      • 2011-02-09
      相关资源
      最近更新 更多