复制多维数组(指针)

标签 c arrays pointers

我有两个指向指针的结构指针

typedef struct Square {
...
...
}Square;

Square **s1; //Representing 2D array of say, 100*100
Square **s2; //Representing 2D array of say, 200*200

两者都是使用 malloc() 在堆上分配的。 我用某些值初始化了 s1,用默认值完全初始化了 s2。 基本上,我需要将 s1 的大小调整为 s2 的大小,同时保持其 (s1) 值,并且“添加的”值将与它们位于 s2 - 默认值。

我写了这个问题memcpy() from smaller array to larger one但显然我混淆了数组和指针/

我的问题是,如何将 s1 的大小调整为 s2 的大小。我不必保留原始指针。如果这是更好的方法,我可以将 s1 复制到 s2 并返回 s2 我希望我能正确解释我所追求的。 谢谢!

最佳答案

二维数组按顺序排列在内存中:row1 row2 row3 etc.

memcpy 执行从一个内存位置到另一个内存位置的线性复制。

所以为了实现你所需要的:

a) 创建一个新数组

Square **s3 = malloc(sizeof(s2));

b) 将s2复制进去

c) 将 s1 中的内容逐行复制到新的

for(r = 0; r < NROWS_S1; r++)
    memcpy(s3[r], s1[r], sizeof(Square) * NCOLS_S1);

http://www.fredosaurus.com/notes-cpp/arrayptr/23two-dim-array-memory-layout.html

关于复制多维数组(指针),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11787286/

相关文章:

c - 在 objective-c 程序中使用 sqlite 时的指针问题

c++ - 复制和指针

c++ - 我重载了 operator<< 以打印 vector 中的所有元素,但它不起作用?

c - Knapsack 1/0 实现需要解释

java - 增加java中用户定义数据类型的数组大小

c - 关于数据结构的建议

javascript - 为什么 "null"会增加数组的长度,即使它代表空值?

php - JSON解析用PHP获取信息

c - 指向结构数组中第一个结构的指针?

c - 拆分整数的十六进制表示并将其保存在字符串中