1. C# []数组 = 符号赋值
迁移时需要重点注意的是构建数组时,C++的对象类为值类,而C#的为指针,C++中的myint
对应的是数值,C#中的myint
对应的是myint
的地址指针。即在C#中使用myint
,在C++中应使用myint*
,才能避免移植操作代码后的生成结果不相同。
1.1 值类型数组赋值
数组 = 操作符赋值
byte[] a = { 1, 2, 3 };
byte[] b = { 11,22,33};
a = b;
a[1] = 111;
Console.WriteLine("输出值:"+b[1].ToString());
返回值为111 即C#中, = 操作符 进行的是指针赋值 a和b为数组a和b的首地址。
数组成员 = 操作符赋值
byte[] a = { 1, 2, 3 };
byte[] b = { 11,22,33};
a[1] = b[1];
a[1] = 111;
Console.WriteLine("输出值:"+b[1].ToString());
返回值为 22,值类型数组的成员赋值时赋的是数值而非指针。
1.2 引用类型数组赋值
首先定义一个数据类myint
class myint { public byte b; }
数组 = 操作符赋值
myint[] aa = { new myint() { b = 1 }, new myint() { b = 2 }, new myint() { b = 3 } };
myint[] bb = { new myint() { b = 11 }, new myint() { b = 22 }, new myint() { b = 33 } };
aa = bb;
aa[1].b = 111;
Console.WriteLine("输出值:" + bb[1].b.ToString());
返回值仍为111,即class的数组也是传递的地址。
数组成员 = 操作符赋值
myint[] aa = { new myint() { b = 1 }, new myint() { b = 2 }, new myint() { b = 3 } };
myint[] bb = { new myint() { b = 11 }, new myint() { b = 22 }, new myint() { b = 33 } };
aa[1] = bb[1];
aa[1].b = 111;
Console.WriteLine("输出值:" + bb[1].b.ToString());
返回值还是111,证明在class的数组的每一个item中,=操作符赋值传递的是myint类的引用(地址指针)。
2.C++ []数组 = 符号赋值
原生数组
int a1[]= {1,2,3};
int b1[]= {11,22,33};
a1 = b1;
编译器提示异常 error: array type ‘int [3]’ is not assignable。
C++的原生数组是不支持 = 操作符的。
QT QVector数组
QVector<int> a1= {1,2,3};
QVector<int> b1= {11,22,33};
a1 = b1;
b1[1] = 111;
qDebug()<<a1[1];
返回值 22,后续对b1数组成员的修改没有影响a1的数组成员。
QVector<int> a1= {1,2,3};
QVector<int> b1= {11,22,33};
a1[1] = b1[1];
b1[1] = 111;
qDebug()<<a1[1];
返回值 22,数组成员的 = 操作符赋值也是传递的值。
在C++中也构建一个myint类
class myint
{
public:
myint(quint8 q)
{
q1 = q;
};
quint8 q1;
};
QVector<myint*> a1;
a1.append(new myint(1));
a1.append(new myint(2));
a1.append(new myint(3));
QVector<myint*> b1 = {new myint(11),new myint(22),new myint(33)};
a1 = b1;
b1[1] = new myint(111);
qDebug()<<a1[1]->q1;
返回 22
QVector<myint*> a1;
a1.append(new myint(1));
a1.append(new myint(2));
a1.append(new myint(3));
QVector<myint*> b1 = {new myint(11),new myint(22),new myint(33)};
a1 = b1;
b1[1]->q1 = 111;
qDebug()<<a1[1]->q1;
返回 111 为指针数组
QVector<myint> a1;
a1.append(*(new myint(1)));
a1.append(*(new myint(2)));
a1.append(*(new myint(3)));
QVector<myint> b1 = {*(new myint(11)),*(new myint(22)),*(new myint(33))};
a1 = b1;
b1[1].q1 = 111;
qDebug()<<a1[1].q1;
返回22 为值数组