【问题标题】:can't create an array of doubles无法创建双精度数组
【发布时间】:2013-02-18 01:37:52
【问题描述】:

我正在尝试创建一个双打数组,我知道我可以这样做,

double a[200];

但为什么我不能像这样创建一个?

int b = 200;

double a[b];

它不起作用。

谁能帮帮我?

更新:

int count;
count = 0
while (fgets(line,1024,data_file) != NULL)
{
    count++;
}

double *x = (double *)malloc(count * sizeof (double));

double xcount = 1.0;

for (int i = 0; i < count; i++)
{
    x[i] = xcount/f;
    xcount = xcount + 1.0;
    printf("%lf\n", x[i]);
}

【问题讨论】:

  • 因为数组的大小是固定的。好吧,C 有一些称为 VLA 的新特性允许这样做,但你的编译器一定不支持它。

标签: c arrays double


【解决方案1】:

@DoxyLover 是完全正确的,此外,如果你想要使用一个常数作为数组的大小,你可以使用像 #define kMaxN 200const int kMaxN = 200 这样的 marco 用于 C++。

如果你想在函数中分配一个数组,你可以像这样使用它

int foo(int n) {
  int a[n];
}

或者如果你想传递一个多维数组作为参数,你可以使用

int foo(int n, int arr[][n]) {
...
}

【讨论】:

  • 我有一个文本文件,我的 b 是计算行数的结果,所以它不能是常数。在计算行数后,我正在创建一个数组以重新读取行,但这次将其中的值添加到数组中。
【解决方案2】:

C 不支持动态数组大小。您必须动态分配内存并使用指针。

int b = 200;

double *a;
a = malloc(b * sizeof (double));

在此之后,您可以像访问数组一样访问 a。

【讨论】:

  • 在这种情况下,应该是 a = (double *)malloc(b * sizeof (double));,对吧?
  • 不需要强制转换void *(因为malloc的返回值是)
  • invalid conversion from 'void*' to 'double*' [-fpermissive]
  • 它不是动态数组,它只是一个可变大小的数组,动态是在运行时执行它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-27
  • 1970-01-01
  • 2011-07-07
  • 1970-01-01
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多