栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

小谈“双重指针”

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

小谈“双重指针”

今天看代码遇到了一个函数,类似如下:

struct CurvCurvInt
{
    Point m_Point[2];//交点在两条曲线上的坐标及参数等信息
    CurvCurvInt* next;//下一个交点
}

void findIntersectors(Curve* curve1, Curve* curve2, CurvCurvInt** firstInt1)
{
    *firstInt1 = new CurvCurvInt();
}

刚开始不太理解这里CurvCurvInt为什么要用双重指针,所以做了点思考。

如果我现在要使用findIntersectors这个函数,使用应如下:

int main()
{
    Curve* curve1 = new Curve();
    Curve* curve2 = new Curve();
    CurvCurvInt* firstInt0 = nullptr;
    
    findIntersectors(curve1, curve2, &firstInt0);
}

自然函数接口中就应该设计为双重指针。

如果不使用双重指针,调用方式为

-----------------------1--------------------------------

void findIntersectors(Curve* curve1, Curve* curve2, CurvCurvInt* firstInt1)

{

      firstInt1 = new CurvCurvInt();

}

CurvCurvInt* firstInt0 = nullptr;

findIntersectors(curve1, curve2, firstInt0);

会导致实参firstInt0拿不到求解后的值,仍为nullptr。

-----------------------2----------------------------------

void findIntersectors(Curve* curve1, Curve* curve2, CurvCurvInt* firstInt1)

{

        firstInt1 = new CurvCurvInt();

}

CurvCurvInt* firstInt0 = new CurvCurvInt();

findIntersectors(curve1, curve2, firstInt0);

此时相当于传指针,但如findIntersector中的实现仍然传不出来值。若findIntersector中的操作直接修改成员变量,如firstInt1->m_Point =  {xxx, xxx}可以将值传出来。

---------------------3----------------------------

void findIntersectors(Curve* curve1, Curve* curve2, CurvCurvInt** firstInt1);

CurvCurvInt** firstInt0 = nullptr;

findIntersectors(curve1, curve2, firstInt0);

这种方法的使用也是不对的,和第一种调用方法一样。

总而言之,此种情景主要是由于函数设计时希望由参数传递结果(使用&)造成的。

基本类型传结果有如下方式:

bool getIntPara(Curve* curv1, Curve* curv2, double& dT);

double a = 0;

getIntPara(curv1, curv2, &a);

那么,最上边原始函数可不可以写成下面这种形式呢?

void findIntersectors(Curve* curve1, Curve* curve2, CurvCurvInt* &firstInt1)

{

        firstInt1 = new CurvCurvInt();

}

CurvCurvInt* firstInt0 = nullptr;

findIntersectors(curve1, curve2, firstInt0);

理论上是可以的~这种即为“指针的引用”

关于“指针的指针”和“指针的引用”,二者达成的效果一致,只是在使用上略有不同,具体可以参考https://www.cnblogs.com/li-peng/p/4116349.html

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/702594.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号