#include <stdio.h>
#include <string.h>
int print(int arr[][3], int n) {
for (int r = 0; r < 3; ++r) {
for (int c = 0; c < n; ++c)
printf("%d ", arr[r][c]);
printf("\n");
}
}
int main() {
int arr[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int arr_copy[3][3];
print(arr, 3);
memcpy(arr_copy, arr, 3);
print(arr_copy, 3);
return 0;
}
1 2 3
4 5 6
7 8 9
-1426063359 32726 -1902787872
22012 0 0
-1902788416 22012 48074240
for (int i = 0; i < 3; ++i)
memcpy(arr_copy[i], arr[i], 3);
为什么上面的代码不起作用,我应该如何纠正?
大小是以字节为单位的,所以您只复制3个字节--甚至不复制一个整数。
memcpy(arr_copy, arr, 3);
您可以通过以字节为单位打印数组的大小来查看数组的大小:
printf("sizeof(arr) = %zu\n", sizeof(arr));
所以正确的memcpy代码应该是:
memcpy(arr_copy, arr, sizeof(arr));
memcpy(arr_copy[i], arr[i], 3);
memcpy(arr_copy[i], arr[i], sizeof(arr[i]));
我是编程新手,我有一个任务要求从一维数组创建二维数组。我想到了这一点(没有任何外部来源的帮助,因为这会剥夺学习经验)。它适用于我们教授的测试输入,我只是想知道这是一个丑陋/低效的解决方案。 测试输入:twoDArray([1,2,3,4,5],3)输出将是:[[1,2,3],[4,5]]
试图实施更大规模的井字游戏 这个游戏可以有超过3行和3列 每当发现4个连续的模式(水平,垂直或交叉) 选手是赢家 我已经找到了水平和垂直匹配的实现方法 但是找不到一种方法来识别2d数组中某个字符的交叉模式 考虑下面的二维数组 ` ` 如何检查“*”字符在这个2d数组中是否有四个连续的交叉模式
我试着做一个Loto游戏,我必须生成一张随机的卡,在第一个collum数字从1-9,第二个10-19一直到90。这张牌的另一个规则是,每行的随机位置上只能有5个数字,这就是我遇到的麻烦。 我从这个开始在每个collum中添加数字: 然后在数组的每一行的一个数字位置上放5个数字我试过这样做: 第三个也一样。 输出: 0 18 0 0 46 0 61 72 88 0 18 0 31 0 55 0 0
我试图将一个2d数组中的特定元素添加到另一个数组中,添加的过程是在数组的第一行选择最小的元素,并将该元素添加到同一位置的另一个2d数组中,例如: 2 22 3 5 1 54 7 3 10 20 22 21 这里,第一行中的最小元素是2,所以应该在相同的位置将2添加到另一个2d数组中,对于第二行,1是最小元素,所以我们也将1添加到另一个2d数组中,第三行中的最小元素是3,最后一行,第四行,最小的元素
这段代码测试了一个标准的3×3tic tac toe游戏中的胜利。我的问题是,我如何改变里面的数字来匹配任何大小的棋盘,比如n×n? 目前,它检查第一行、第二行和第三行,以检查任何一个玩家是否在任何一行中获胜,接下来是列和对角线。但是,当板的大小更改为其他大小时,这将不再成立,因为它不会检查每一个可能的行/列/对角线。那么,对于尺寸为n×n的板,我该如何做到这一点。请不要代码,因为我不希望剽窃,但
我正在为一款新游戏编写关卡编辑器。问题是,我不确定用什么结构来存储数据。 它是一个基于平铺的地图引擎,使用x和y坐标以及该位置的平铺id。 我有多层,地图是可调整大小的,所以数组可能会给我带来一些麻烦,这就是为什么我选择了d::向量。为了防止大量过载,我只在有人放置瓷砖时添加一个瓷砖,所以如果没有瓷砖,矢量大小为零,并且放置的瓷砖越多,矢量大小就越大。 还有我的向量: 问题是,在添加新的磁贴之前,