C#代码向C++迁移(一)数组类型

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 为值数组

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值