初始化C动态数组 [英] Initializing C dynamic arrays

查看:22
本文介绍了初始化C动态数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何初始化使用malloc分配的动态数组?我可以这样做吗:

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而不是malloccalloc将在将分配的字节位置设置为零后返回内存挡路。

完成后,请释放内存挡路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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆