Arrays 如何从C中的数组中删除数组
我使用2D int数组在游戏板上显示它的值。 问题是,当一行仅由相同值的数字组成时,该行必须消失 我目前正在使用负值跳过数字显示。 如何从另一个数组中删除包含类似值的数组 这是:Arrays 如何从C中的数组中删除数组,arrays,c,double,line,remove,Arrays,C,Double,Line,Remove,我使用2D int数组在游戏板上显示它的值。 问题是,当一行仅由相同值的数字组成时,该行必须消失 我目前正在使用负值跳过数字显示。 如何从另一个数组中删除包含类似值的数组 这是: srand(time(NULL)); int **arr; for(i = 0; i < 9; i++) { for(j = 0; j < 9; j++) { arr[i][j] = rand() % 10; // Number between 0 and 9 } } 我不需要任何条
srand(time(NULL));
int **arr;
for(i = 0; i < 9; i++) {
for(j = 0; j < 9; j++) {
arr[i][j] = rand() % 10; // Number between 0 and 9
}
}
我不需要任何条件结构,只需要删除行的方法。
提前感谢:
GUEROUI Mourad首先,因为您使用指针定义了二维数组,这意味着您需要动态分配它。我从你的问题推断你是C语言的初学者,所以我不知道你是否学过动态内存分配 如果尚未学习动态内存分配,请将int**arr更改为int arr[9][9]。我之所以使用9,是因为你用它来表示I和j,它们是你的行和列 如果您想通过动态内存分配来实现,请使用malloc函数。即使您将二维数组视为数组的数组,但在一天结束时,数组的标识符是指向数组中第一个元素的指针。因此,不要将二维数组视为数组数组,而应将其视为指针数组。至少,当您动态分配数组时,您必须这样考虑它们。代码如下所示
int **arr = (int**)malloc(sizeof(int*) * 9); // allocate an array of 9 int pointers
for (unsigned i = 0; i < 9; i++) { // at each pointer, allocate an arrray
arr[i] = (int*)malloc(sizeof(int) * 9);
}
完成后,可以使用已经编写的for循环用随机值填充数组
关于你原来的问题,我还是不太明白你在问什么。请澄清。我建议一种更简单的方法:与其分配和释放内存,不如使用静态2D数组,并创建一个函数来检查一行是否仅由相同的重复编号组成。 例如,如果要打印行,此函数返回1,否则返回0:
int isToPrint( int *line, int len )
{
for(int i = 1; i < len; i++) {
if( line[i] != line[i-1] ) return 1;
}
return 0;
}
您的代码几乎肯定会出错。现在还不清楚你想做什么。移除阵列是什么意思?C语言中没有这样的术语,真的吗?这就是我在学校学到的。这是为什么?你可以在我提供的链接中阅读所有你需要了解的内容。你也用错了sizeof。谢谢你的回复Ben!我还没有编写用于动态分配的malloc和free函数,但不用担心,我知道如何处理它们:我的问题是,如果您愿意,如何从[9][9]数组中获取[9][8]。我必须用旧的值从头开始重新动态分配内存吗?你有没有在学校读过《让我们用C》这本书?
if( isToPrint(array[i], len) ) {...print the line...}