要理解清楚,请线性阅读答案
首先了解你的函数声明(阅读评论):
void CalculateBoth(int num1, int num2, int*sumPtr, int *diffPtr);
// ^
// return type ^--------^ ^-----------^
// first two are simple int last two are pointer to integers
注意函数的返回类型void
意味着它不返回(或者说返回无效)。
但是你的功能CalculateBoth()
很好它计算和和差。(两件事)
在 C 编程中,我们不能从函数中返回一个以上的参数。在这种情况下,指针非常有用。所以最后你的参数实际上是函数CalculateBoth()太阳和差异的输出参数。
喜欢(再次阅读评论):
void CalculateBoth(int num1, int num2, int*sumPtr, int *diffPtr);
// ^
// return type ^--------^ ^-----------^
// two input arguments Output sum and difference
因为按值传递不反映调用语句的变化,所以我们使用按地址变量传递。
指针是可以保存其他变量地址的变量。
因为在main()
函数中,您需要两个变量的和和差,num1
并且num2
. 当我们调用函数时,我们传递了两个结果变量的CalculateBoth()
地址main()
。
所以你在 main() 中的结果变量是:
int sumResult, differenceResult;
你主要喜欢:
CalculateBoth(num1, num2, &sumResult, &differenceResult);
注意&
:变量前面的和号运算符sumResult
,differenceResult
是地址运算符给出其操作数的地址。通过简单地编写变量名,您正在传递值,但如果您使用&
运算符,您将传递变量的地址。
CalculateBoth()
具有其变量的本地副本的函数。但是在最后两个参数的情况下,函数将结果存储在地址而不是它们的本地副本,因此结果反映在调用函数main()
中。
void CalculateBoth( int num1, int num2, int*sumPtr, int *diffPtr)
//variable types are: value value address address
{
*sumPtr = num1+num2; //store result of + memory pointer
*diffPtr= num1-num2; // by variable sumPtr, *diffPtr
}
注意:*
这里是地址运算符的值给出了存储在地址中的值。操作的结果是操作数寻址的值;也就是说,它的操作数指向的地址处的值。所以你通过两个变量存储在内存指针
所以改为调用你的函数:
differenceResult = CalculateBoth (num1, num2);
打电话
CalculateBoth(num1, num2, &sumResult, &differenceResult);
differenceResult =
另外,如果你在上面的函数调用表达式前面写a,你做错了,因为CalculateBoth()
什么都不返回。