初始化C动态数组 [英] Initializing C dynamic arrays
本文介绍了初始化C动态数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
int *p;
p = malloc(3 * sizeof(*p));
p = {0, 1, 2};
...
free(p);
还是我需要这样做:
int *p, x;
p = malloc(3 * sizeof(*p));
for (x = 0; x < 3; x++)
p[x] = 0;
...
free(p);
还是有更好的方法?
推荐答案
您需要分配一个挡路内存作为数组使用,如下所示:
int *arr = malloc (sizeof (int) * n); /* n is the length of the array */
int i;
for (i=0; i<n; i++)
{
arr[i] = 0;
}
如果需要用零初始化数组,也可以使用C标准库(在string.h
中声明)中的memset
函数。
memset (arr, 0, sizeof (int) * n);
这里0
是将用来设置数组的每个位置的常量。请注意,最后一个参数是要设置常量的字节数。由于数组的每个位置都存储一个整数,因此我们需要将总字节数作为此参数传递。
此外,如果希望将数组清零,则可能需要使用calloc
而不是malloc
。calloc
将在将分配的字节位置设置为零后返回内存挡路。
完成后,请释放内存挡路free (arr)
。
EDIT1
请注意,如果要使用memset
在整数数组的位置分配特定的整数,则这将是一个问题。这是因为memset
会将数组解释为字节数组,并将您给出的字节分配给数组的每个字节。因此,如果您想在每个位置存储比方说11243,那么这是不可能的。
EDIT2
还请注意为什么每次使用memset
将整型数组设置为0可能不起作用:如@Shafik Yaghmour所指出的Why does "memset(arr, -1, sizeof(arr)/sizeof(int))" not clear an integer array to -1?
这篇关于初始化C动态数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文