我正在学习C,我想坠入爱河,但是我新发现的爱使我在这个简单的(应该是)代码中感到惊讶。我只是想打印一个2D网格,以整数填充。无论我进行了什么更改,它始终会给出相同的int
相关错误。有什么帮助吗?
#include <stdio.h>
#include <stdlib.h>
/* malloc_grid - create a 2D array of integers */
int **malloc_grid(int width, int height)
{
int i, j;
int **arr;
if (width < 1 || height < 1)
return (NULL);
arr = (int **)malloc(height * sizeof(int *));
if (arr == NULL)
{
free(arr);
return (NULL);
}
for (i = 0; i < height; i++)
{
arr[i] = (int *)malloc(width * sizeof(int));
if (arr[i] == NULL)
{
for (; i >= 0; i--)
{
free(arr[i]);
}
free(arr);
return (NULL);
}
}
for (i = 0; i < height; i++)
{
for (j = 0; j < width; j++)
arr[i][j] = 0;
}
return (arr);
}
/* main - program entry point */
int main(void)
{
printf("%d", malloc_grid(int 6, int 4));
return 0;
}
我可能做错了什么?
调用函数时,无需声明参数类型。 printf("%d", malloc_grid(6,4));
[在某些高级语言(如Python)中,您可以在print
命令中抛出任何您喜欢的东西,它将尝试对此做出明智的选择。
C不是这些语言之一。您需要更精确。
首先int 6, int 4
没有意义。您的编译器会告诉您这一点。如果您要输入这些数字,只需写6, 4
。
其次,%d
是需要整数参数的格式说明符。但是,您正在传递一个指向整数的指针。同样,这没有任何意义。如果要打印整个数组,则必须分别打印每个元素。可能是这样的:
int main(void)
{
int i, j, **grid;
grid = malloc_grid(6,4);
if (grid == NULL) {
printf("Memory allocation error\n");
return 1;
}
for (j=0; j<4; j++) {
for (i=0; i<6; i++) {
printf("%3d ", grid[j][i]);
}
printf("\n");
}
return 0;
}