首先在c++中是不允许数组作为函数的返回值的 

在我刚开始使用返回数组时,直接返回去一个数组,让一个指针去接收,如下:(错误的写法)

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

int* mainWindow::data()

{

   int  tx[] = {    //要发送的数据数组
                        0xA2, 0x00, 0x00,
                        0xA2, 0x00, 0x00,
                        0xA2, 0x00, 0x00,
                        0xA2, 0x00, 0x00,
                        0xA2, 0x00, 0x00,
                        0xA2, 0x00, 0x00,
                        0xA2, 0x00, 0x00,
                        0xA2, 0x00, 0x00,
                        0xA2, 0x00, 0x00,
                        0xA2, 0x00, 0x00,
                   };

 return  tx;

}

然后用指针接收

int *p = data();

qDebug()<<p[0];

发现在运行的时候会出现段错误,发现很多C语言都是这样写的,并没有错。

后来发现c++中是不允许数组作为函数的返回值的 

正确的做法是:

#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
int* mainWindow::data()
{
   int  tx[] = {    //要发送的数据数组
                        0xA2, 0x00, 0x00,
                        0xA2, 0x00, 0x00,
                        0xA2, 0x00, 0x00,
                        0xA2, 0x00, 0x00,
                        0xA2, 0x00, 0x00,
                        0xA2, 0x00, 0x00,
                        0xA2, 0x00, 0x00,
                        0xA2, 0x00, 0x00,
                        0xA2, 0x00, 0x00,
                        0xA2, 0x00, 0x00,
                   };

  int* temp = new int[ARRAY_SIZE(tx)];
  for ( int i =0; i < ARRAY_SIZE(tx); i++)
  temp[i] = (int)rx[i];
   return temp;
}

int  *p = data();
qDebug()<<p[0];
delete p;

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄