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

> 来源：梦飞idc云平台 | 原文：https://www.mfisp.com/21884.html | 发布：2023-07-07 | 更新：2023-07-07 | 分类：建站教程

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

 

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

---
本页由 梦飞idc云平台（https://www.mfisp.com）提供。站点导航见 https://www.mfisp.com/llms.txt
