关于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很大的话,这样的函数调用岂不是花费巨大?如果这样,那么全部用指针或引用(引用更安全一些),或许会是一种很好的编程方法。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值