我想知道数组的大小说
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取决于“错误”,错误取决于每次运行程序时更改的“层”。请提出你的建议。 提前谢谢!
答案 0 :(得分:1)
不要混淆这样的多个问题!但还是......
我想知道数组的大小
您可以使用以下习语:
sizeof(x1)/sizeof(x1[0])
这将计算整个数组的大小(以字节为单位),并将其除以第一个数组元素的大小,再次以字节为单位,给出数组中元素的数量。我经常发现自己定义了像
这样的宏#define LEN(x) (sizeof(x)/sizeof((x)[0]))
此代码的一个好处是它通常可以在编译时进行评估,因此编译器通常会用一个整数常量替换它。
如何使用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
调用与错误检查相结合。