指针与引用的例子

在Qt编程中,会经常使用指针、引用对变量进行传递与运算,总结一下。

指针是与数据相对应的,比起将整个数据进行传递而言,指针明显是更轻更快的;

例如对于二维数据的有关计算,个人习惯于用连续的一维数组进行表示:

int main(){
    
    void func(float *p,int m,int n);
    
    int m=100,n=50;
    float *p=(float *)malloc(siezof(float)*m*n);

    memset(p,0,sizeof(float)*m*n);

    func(p,m,n);
    
    return 0;
}

void func(float *p,int m,int n){
    
    for(int i=0;i<m;i++){
        for(int=0;j<n;j++){
            *(p+i+j)=i+j;
        }
    }

}

引用是对变量的别名,是和取址符不同的;

引用是和类型相关的,取址是和变量相关的,例如:

int a=10;
int &ra=a;
int *p=&a;

一些应用:

void MainWindow::importData(const QString &filePath)
{ 
//第一种写法 :常规
    QFile infile(filePath);
    if( !infile.open(QIODevice::ReadOnly) ) {
        qDebug() <<__func__ <<infile.errorString();
        return;
    }
    QDataStream instream(&infile);

//第二种写法:指针
    QFile *infile=new QFile(filePath);
    if( !infile->open(QIODevice::ReadOnly) ) {
        qDebug() <<__func__ <<infile->errorString();
        return;
    }
    QDataStream instream(infile);

//第三种写法:引用
    QFile *infile=new QFile(filePath);
    if( !infile->open(QIODevice::ReadOnly) ) {
        qDebug() <<__func__ <<infile->errorString();
        return;
    }
    QDataStream *instream0=new QDataStream(infile);
    //QFile 继承于 QIOdevice;
    
    QDataStream &instream=*instream0;
    //此处本来打算使用拷贝构造函数将QDataStream *转为QDataStream,
    //QDataStream instream=*instream0;(不支持拷贝)
    //但QDataStream没有拷贝构造函数、操作符=,因此使用引用,不改变后续的代码;


    //qt ,default doubleprecision ,bigendian
    instream.setFloatingPointPrecision(QDataStream::SinglePrecision);
    instream.setByteOrder( QDataStream::LittleEndian );
}

指针类型转换是改变指针对数据的获取方式,例如对于函数

int QDataStream::readRawData(char *s, int len)

来说,是将流中的数据按单个字节读入直到len个字节长度,那怎么将读入的数据组合为4字节的float类型的变量呢?答案是改变指针类型,将数据按单个字节读入,然后按浮点数据解释(即类型转换)。

QDataStream out(&filePath);//filePath为const QString类型
float vf=0.0f;
out.readRawData((char*)&vf,sizeof(float));//按单字节读入
p->m_wellDepth=vf;//p为一结构体,m_wellDepth为p的浮点类型成员变量;

类型转换并不改变数据的存储形式,而是改变解释形式。

参考:什么是引用?_HenoyzZ的博客-CSDN博客_引用类型有 基本数据类型 和 复合类型 ;基本数据类型,如int,char等基本数据类型;复合类型:指针 和 引用;引用:为对象起立另一个名字,引用类型引用另一种类型。引用并非对象,相反的,它只是为一个已存在的对象所起的另外一个名字。如图1-1。 图 1-1引用必须进行初始化,定义了一个引用之后,对其进行的所有操作...https://blog.csdn.net/jwhazt/article/details/93190750?spm=1001.2014.3001.5506

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值