使用size_t来获取数组的大小。另外,如何使用malloc动态地将内存分配给数组?

时间:2012-08-07 20:14:37

标签: c malloc sizeof

我想知道数组的大小说

    x1={1,6,8,9};

我知道通过查看它,但如果它是在代码中生成的,它的大小会影响另一个数组的大小,我怎么能得到它。  我见过stddef标题,但语法是什么?

    std::size_t n=sizeof(x1)

我想用C语言,而不是C ++语言。 如何使用malloc动态地将内存分配给数组?

如果我没有在main()之外声明数组的大小,则会给出错误“表达式必须具有指向对象的指针类型”。我不能在main之外定义它,因为它不断变化。例如下面是matlab中我想用C

转换的代码
    error=65536*((0.5)^layer); 
    for i=1:samp                                %% samples*columns
      if abs(x_cvr(i)- d(i)) >= k
       p_end=error-1;
       check1 = zeros(1,p_end,'double');
       check2 = zeros(1,p_end,'double');
     for p=1:p_end                       %% to generate combinations
           check1(p)=(x_cvr(i))+p;
           check2(p)=(x_cvr(i))-p;
       end;

现在检查的大小取决于“p”​​而p取决于“错误”,错误取决于每次运行程序时更改的“层”。请提出你的建议。 提前谢谢!

1 个答案:

答案 0 :(得分:1)

不要混淆这样的多个问题!但还是......

数组大小

  

我想知道数组的大小

您可以使用以下习语:

sizeof(x1)/sizeof(x1[0])

这将计算整个数组的大小(以字节为单位),并将其除以第一个数组元素的大小,再次以字节为单位,给出数组中元素的数量。我经常发现自己定义了像

这样的宏
#define LEN(x) (sizeof(x)/sizeof((x)[0]))

此代码的一个好处是它通常可以在编译时进行评估,因此编译器通常会用一个整数常量替换它。

使用malloc

  

如何使用malloc动态地将内存分配给数组?

您可以这样做:

int *arr;
unsigned nelem = 42;
arr = malloc(nelem * sizeof(*arr));
if (arr == NULL) {
  fprintf(stderr, "Out of memory.\n");
  exit(EXIT_FAILURE);
}

现在arr的行为大致类似于42个整数元素的数组。请注意,上面讨论的LEN技巧不适用于arr,因为它实际上是一个指针,所以sizeof(arr)将是指针的大小,而不是分配的数组的大小。要获得后者,您必须自己跟踪分配的大小。许多程序包含一个小函数(通常称为xalloc),它将malloc调用与错误检查相结合。