arrays - Memcpy 将 C 数组的内容作为指针返回
问题描述
我想将 ac 数组的内容复制到另一个数组的内容,我意识到你不能简单地做
array1 = array2;
相反,您应该使用 for 循环遍历每个索引,或者使用 memcpy. 我想使用 memcpy,因为人们说它可以节省空间,而且我的程序有 3KB 的限制(我想将它放入 QR 码中)。
我有一个函数,在我的程序中我试图利用它,但是当我打印结果时,它们会以指针的形式出现。我对为什么会发生这种情况感到非常困惑,因为我见过的其他人使用它结果很好。我能做什么呢?我的功能在这里:
void ShiftBlock(int curBlock[4][2], int shiftCoords[2], int curGrid[WIDTH][HEIGHT])
{
int blockCoords[4][2] = {0};
memcpy(blockCoords, curBlock, sizeof(blockCoords));
for(int i = 0; i < 4; i++)
{
blockCoords[i][0] += shiftCoords[0];
blockCoords[i][1] += shiftCoords[1];
if (0 > blockCoords[i][0] || blockCoords[i][0] > WIDTH || 0 > blockCoords[i][1] || blockCoords[i][1] > HEIGHT || curGrid[blockCoords[i][0]][blockCoords[i][1]] != 0)
{
return;
}
}
memcpy(curBlock, blockCoords, sizeof(curBlock));
}
解决方案
数组不能作为参数传递,因此对于参数类型,数组类型的第一个维度总是被忽略,参数声明是一个指针。所以你的函数类型实际上是:
void ShiftBlock(int (*curBlock)[2], int* shiftCoords, int (*curGrid)[HEIGHT])
我建议使用这种形式,因为另一种具有误导性。
现在你可以看到这sizeof(curBlock)
是错误的。它只是一个指针的大小。所以要么使用sizeof(blockCoords)
orsizeof(int[4][2])
要么4 * sizeof(*curBlock)
。
推荐阅读
- sql - 即使 CTE 应该只有好的日期,也会出现转换错误
- python - 我可以在 django 中获得屏幕分辨率请求吗?
- javascript - mongoDB collection.findOne() 返回未定义
- ruby-on-rails - 如何在模块中调用特定于类的方法
- android - Android 上的 WiFi 扫描
- python - Python:简单循环中的多处理
- c++ - 如何旋转 pcl::CropBox wrt 它自己的特定轴而不是全局轴?或者如何将仿射变换应用于 pcl::CropBox?
- amazon-web-services - 胶水作业模式推理问题
- laravel - Laravel 查询生成器 - 日期查询不起作用
- python - 具有 2 个域的 Django 2.2