关于C++结构体的函数调用

在一段利(没)用(事)链(找)表(事)来实现正整数相加的程序中,有一个函数是这样的,实现了将位数较小的链表最高位加到位数较大的链表上的功能。

void addMostDigit(List addee, List adder){//addee的位数不小于adder
    int index = addee.size() - adder.size();
    int sum = addee.get(index)->digit + adder.header->digit;
    adder.header = adder.header->next;
 
    if (sum < 10)
    {
        addee.get(index)->digit = sum;
        return;
    }
 
    while (sum >= 10){
        addee.get(index)->digit = sum % 10;
 
        if (index == 0)//需要变动最高位
        {
            Node* newHead = new Node('1');
            newHead->next = addee.header;
            addee.header = newHead;
            break;
        }
 
        sum = addee.get(--index)->digit + sum / 10;
        if (sum < 10)
        {
            addee.get(index)->digit = sum;
            break;
        }
    }
}

错误是很简单的,此处传递的List应该是List*,而非List;这一点相信在交换两个整数值的函数中就已明确。我犯错的原因,大概是不知不觉间又用了java的思维——一切都是引用变量。

 

解决方案很简单,该用地址传递即可。

void addMostDigit(List* addee, List* adder){
    int index = addee->size() - adder->size();
    int sum = addee->get(index)->digit + adder->header->digit;
    adder->header = adder->header->next;
    
    if (sum < 10)
    {
        addee->get(index)->digit = sum;
        return;
    }
    
    while (sum >= 10){
        addee->get(index)->digit = sum % 10;
        
        if (index == 0)
        {
            Node* newHead = new Node('1');
            newHead->next = addee->header;
            addee->header = newHead;
            break;
        }
        
        sum = addee->get(--index)->digit + sum / 10;
        if (sum < 10)
        {
            addee->get(index)->digit = sum;
            break;
        }
    }
}

从这个角度讲,java的原点运算符实际上等价于C++的->,而java编程时的规则,不过是C++可遵守的诸多规则之一而已。

换而言之,在栈帧的调用时,准备的入口参数中,真的包含了List这个struct的实体。那么,如果struct很大的话,这样的函数调用岂不是花费巨大?如果这样,那么全部用指针或引用(引用更安全一些),或许会是一种很好的编程方法。

文章链接: https://www.mfisp.com/21884.html

文章标题:关于C++结构体的函数调用

文章版权:梦飞科技所发布的内容,部分为原创文章,转载请注明来源,网络转载文章如有侵权请联系我们!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
建站教程

C++调用结构体函数

2023-7-7 14:03:35

建站教程

c++ c#结构体调用

2023-7-7 14:39:48

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
客户经理
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索

梦飞科技 - 最新云主机促销服务器租用优惠