我有两个指向指针的结构指针
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/