这是我在C中的第一个编程。在printGrid()函数中,我试图给2D数组分配一些值,并且2D数组中的其余点只分配0。一个数组,它按预期工作。但是,当我使用display()函数打印出整个数组时,它无法正常工作,数组中的所有值均为0.在发布问题之前,我花了几个小时来完成搜索和调试这里。有人可以帮我解决这个问题吗?谢谢。为什么2D数组总是在C中输出0?
#include <stdio.h>
#include <stdlib.h>
const int max_height = 4;
int height; //the height of pile
int center_x_index, center_y_index; //index of input parameter that is center of the plane
int unstable;
int drop_status;
int *grid[5][5];
int is_stable(int total_param, char *piles[]);
void display(int *grid[5][5]);
/*
Function to print out the 23*23 grid with given number of piles
*/
void printGrid(int total_param, char *piles[])
{
int i, j, k, size, assigned;
size = 5;
for (i = 0; i < size; i++)
{
for (j = 0; j < size; j++)
{
for (k = 1; k < total_param; k = k + 3)
{
if ((atoi(piles[k]) == i) && (atoi(piles[k + 1]) == j))
{
height = atoi(piles[k + 2]);
//find the central pile of the plane and drop a grain of sand onto this pile.
if ((i == j) && i == (size/2))
{
center_x_index = k;
center_y_index = k + 1;
if (drop_status > 0 && is_stable(total_param, piles))
{
drop();
}
}
grid[i][j] = &height; //store value into 2D array
//printf("2D array: %d", *grid[i][j]);
printf("%d", height);
assigned = 1;
break;
}
else
{
assigned = 0;
}
}
if (assigned != 1)
{
height = 0;
grid[i][j] = &height;
printf("%d", 0);
}
}
printf("\n");
}
}
void display(int *grid[5][5])
{
int i, j;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
printf("%d", *grid[i][j]);
}
printf("\n");
}
}
int main(int argc, char *argv[])
{
printGrid(argc, argv);
printf("\n");
}
因为'&height'总是相同的值,'grid [i] [j] =&height'不会像你期望的那样工作。 – ymonad
添加预期发布的命令行和输出示例。 ('center =(char)(atoi(argv [center_x_index + 2]) - 4); argv [center_x_index + 2] =&center;':我不认为它可以正常工作,即使预期会发生什么。) – BLUEPIXY
请缩进您的代码并尝试发布[MCVE](https://stackoverflow.com/help/mcve),而不是整个程序。此外,[不要使用'atoi'](https://stackoverflow.com/q/17710018/995714) –