c - 关于将指针集成到程序中的建议

标签 c function pointers

在我正在编写的初学者程序中,我必须使用 3 个函数来获取两个参数的和与差。在第三个函数中,我必须将结果存储在两个指针中。我的问题是,我无法成功地将第三个函数集成到 main 中。

我的主要功能如下:

int main ()
{
    int num1, num2;
    int sumResult, differenceResult;

    printf("Please enter a number: ");
    scanf("%d", &num1);
    printf("Please enter another number: ");
    scanf("%d", &num2);

    sumResult = CalculateSum (num1, num2);

    printf("the result of the sum is %d\n", sumResult);

    differenceResult = CalculateDifference (num1, num2);

    printf("the result of the difference is %d\n", differenceResult);

    return 0;
}

我处理指针的函数:

void CalculateBoth(int num1, int num2, int*sumPtr, int *diffPtr)
{
    *sumPtr = num1+num2;

    *diffPtr= num1-num2;

}

有什么建议吗?

最佳答案

指针(通常)用于传递的不是参数值,而是参数值所在的内存地址。这允许您修改参数值。

让我们以将 2 添加到 argument 并通过 result 变量传递结果的函数为例:

void WrongAdd2(int argument, int result)
{
    result = argument + 2;
}

在这种情况下,您传递结果值,但结果中的任何更改都将是本地的。 相反,指针告诉的不是值,而是值所在的地址。

void Add2(int argument, int *result)
{
    *result = argument + 2;
}

这里result“int的地址”,因此*result位于result指向的内存中。

要在函数中使用指针,您应该在内存中为结果留出位置:

int value = 10;
int result = 0;

WrongAdd2(value, result); /* result is still 0. */
Add2(value, &result);     /* result is updated and now it is 12. */

因此,您需要使用相同的前两个参数调用CalculateBoth,但结果将通过第三个和第四个参数传递,这些参数是指向要放置输出参数的位置(包含其地址)的指针。

CalculateBoth(num1, num2, &sumResult, &differenceResult);

你说的是:好吧,取num1num2的值并传递sumResultdifferenceResult的地址作为输出参数。

关于c - 关于将指针集成到程序中的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15576335/

相关文章:

arrays - Golang如何在指针数组中取值

c - C中变量的逻辑内存地址

c - 内存会被破坏吗?

c - 指针地址和段错误

function - SBCL 时间函数返回什么?

c - 传递 char* 作为参数时出现段错误 - c

c - Opengl 什么也没画,只是告诉我没有错误

c++ - 使用 map<const string, function<? (?)>> 命令;

c - 如何从二维数组打印单个字符

c - 如何从字符串中提取实数?