我已经在C编程中启动了功能单元。我对功能指针感到困惑。我理解没有任何指针的正常函数,但我真的很困惑指针函数。假设我有以下功能:
#include <stdio.h>
int functions_1(double num1, double num2);
int main(void) {
double mark1;
double mark2;
double total;
printf("Enter marks for subject one: ");
scanf("%lf", &mark1);
printf("Enter marks for subject two: ");
scanf("%lf", &mark2);
total = functions_1(mark1, mark2);
printf("Your average is: %.2f \n", total);
/* if (total > 50) {
printf("You have passed. \n");
}
else {
printf("You have failed \n");
}*/
return 0;
}
int fucntions_1(double num1, double num2) {
double average;
double averageTwo;
average = num1 + num2;
averageTwo = average / 200;
return averageTwo;
}
我如何在C编程中使用指针做同样的事情? 我不是要求你做编码,但我想理解这个概念! 感谢
答案 0 :(得分:0)
在这种情况下使用指针的想法是允许您将变量传递给函数。所以你想要3个参数,而不是2个 - 比如void function2(double num1,double num2,double* result)
既然你说你宁愿自己编写代码,我就不会给出实现答案 - 但是你需要在函数外面声明一个double
变量(在main
中),将其地址传递给最后一个参数(地址为指针),然后在函数中,使用解引用运算符(*
)将指针指向的值更改为结果。你不需要(或想要)返回任何东西。
指针很难理解。在真正需要它们的概念之前必须引入它们并没有帮助,因此使用的示例通常看起来有点人为 - 如果您在生产程序中编写函数,您可能只使用返回的函数值。
这个想法实际上是为了跟踪单个内存,因此您可以在程序的多个位置使用它。在这种情况下,您从一个可在其中访问的函数外部创建一个变量,以便您可以写入它。
您可能知道,当参数传递给C函数时,它们会被复制到函数内部的新内存中。这就是为什么更改传递给其中的函数的参数变量的值对外部变量的值没有影响。你可以改变它们但它没有效果,因为它们不占用相同的内存。指针是解决这个问题的一种方法。它只是一些内存的地址,只是一个数字。它被传递到函数时被复制并不重要,因为我们没有将它作为一块内存使用,我们使用它包含的值作为从函数外部查找原始变量内存的方法。因此,当您取消引用指针的值(使用*)并赋值给它时,您将更改函数外部的变量值,因为是函数外部的变量。
以这种方式做事的一个好处是它释放了函数的返回值来完成另一项工作。相当多的常见C库函数以这种方式使用它,例如sprintf
,fwrite
scanf
- 通常返回写入的字符数或字节数,或表示失败。
malloc
和类似函数明确分配的内存。一旦你开始使用malloc
,并了解堆如何工作,指针和使用它们的原因更有意义,尽管它仍然不是一帆风顺。