在我进行内存分配后,我得到了关于这个int数组初始化的小问题。我得到以下错误:
“第7行错误:在'{'令牌”
之前的预期表达式
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
int *x=malloc(3*sizeof(int)); //allocation
*x={1,2,3}; //(Line 7) trying to initialize. Also tried with x[]={1,2,3}.
for(i=0;i<3;i++)
{
printf("%d ",x[i]);
}
return 0;
}
在进行内存分配后,还有其他方法可以初始化我的数组吗?
答案 0 :(得分:0)
首先,我们必须了解数组的内存是在堆内存区域分配的。因此我们可以通过以下方法初始化。
以上两种方法通过malloc函数保留内存分配。 但是,通过(int []){1,2,3}进行赋值将导致内存浪费,原因是之前分配的堆内存。
int* x = (int*) malloc(3 * sizeof(int));
printf("memory location x : %p\n",x);
// 1. using memcpy function
memcpy(x, (int []) {1,2,3}, 3 * sizeof(int) );
printf("memory location x : %p\n",x);
// 2. pointer arithmetic
*(x + 0) = 1;
*(x + 1) = 2;
*(x + 2) = 3;
printf("memory location x : %p\n",x);
// 3. assignment, useless in case of previous memory allocation
x = (int []) { 1, 2, 3 };
printf("memory location x : %p\n",x);