【发布时间】:2012-09-22 10:59:55
【问题描述】:
我正在学习如何在 C 中创建动态一维数组。下面的代码尝试执行以下操作:
- 使用
malloc,创建一个长度为10的动态数组,其中包含double类型的值。 - 将数组的每个条目设置为
j/100以获取j = 0, 1,..., 9。然后打印出来。 - 使用
realloc在数组末尾添加一个额外的空条目。 - 将新条目设置为
j/100并再次打印出每个条目。
测试:
double* data = (double*)malloc(10*sizeof(double));
for (j=0;j<10;j++)
{
data[j]= ((double)j)/100;
printf("%g, ",data[j]);
}
printf("\n");
data = (double*)realloc(data,11*sizeof(double));
for (j=0;j<11;j++)
{
if (j == 10){ data[j]= ((double)j)/100; }
printf("%g, ",data[j]);
}
free((void*) data);
问题
我编码对了吗?
-
我发现使用
malloc的教程没有将(double*)放在前面。例如,int *指针;
指针 = malloc(2*sizeof(int));
这不适用于我在 Visual Studio 2010、Windows 7 上编译。错误消息是
void 类型的值不能分配给
int类型的实体。
为什么它适用于那些教程而不适用于我?我猜是不是因为他们使用的编译器在我的示例中自动为他们填写了(int*)?
【问题讨论】:
-
“void 类型的值不能分配给 int 类型的实体”不是 C 编译器应该产生的错误。问题是您使用的是 C++ 编译器。确保您的源文件名为
<something>.c。