目前,我已经使我的两个对象指针工作起来了,例如:
Object * obj1;
Object * obj2;
obj2 = obj2;
如果我有这样的需求,该如何让它起作用?
Object * array[10][10];
Object * newarray[10][10];
我能否在不使用循环遍历元素的情况下将数组分配给新数组?
我问这个问题是因为我的主类中有这个数组。然后将其传递给子类以便对其进行操作,需要在新类中保存复制品以便子类函数可以访问它。
谢谢
Object * array[10][10];
并不是指向一个10x10对象数组的指针,而是一个由10x10个指向对象的指针组成的数组。
#include <iostream>
struct Object {};
Object * arr[10][10];
int main(int argc, const char* argv[])
{
std::cout << "sizeof arr = " << sizeof(arr) << std::endl;
return 0;
}
产生 arr1的大小为400
如果您想坚持C语言的行为,可以使用memcpy:
#include <iostream>
#include <string.h>
struct Object {};
Object * arr1[10][10];
Object * arr2[10][10];
...
memcpy(arr1, arr2, sizeof(arr1));
如果你想采用C++的方式,就像其他人所说的那样,可以看一下std::array或std::vector。
#include<stdio.h>
#include<string.h>
int main()
{
int *x1[2][2];
int *x2[2][2];
int a1 = 100;
int b1 = 101;
int c1 = 110;
int d1 = 111;
int a2 = 200;
int b2 = 201;
int c2 = 210;
int d2 = 211;
x1[0][0] = &a1;
x1[0][1] = &b1;
x1[1][0] = &c1;
x1[1][1] = &d1;
x2[0][0] = &a2;
x2[0][1] = &b2;
x2[1][0] = &c2;
x2[1][1] = &d2;
memcpy(x1,x2,sizeof(x2));
printf("%d\n",*x1[1][1]);
return 1;
}
std::array
。顺便说一下,如果它们管理内存,您可能要考虑切换到智能指针。 - chrisstd::uninitialized_fill
。 - David Gstd::uninitialized_copy
,对吧?个人而言,我更喜欢在这里使用std::copy
。uninitialized_copy
之所以能够工作,是因为我们在谈论平凡类型,但如果类型是非平凡的,我会更喜欢普通的copy
,因为它与你在处理非平凡类型时所做的操作一致。uninitialized_...
函数是用于特殊目的的,其中您正在尝试在未初始化的内存中构造对象。我们这里并不需要构造,我们需要赋值(虽然对于平凡类型,在优化后没有区别),这就是std::copy
的作用。 - Benjamin Lindleyarray[10][10]
不是指针,它是一个指针的二维数组。 - AndersK