在 c 中本地使用指针调用和返回函数



你好,我正在学习指针,所以我创建了一个计算器。我设法从函数返回值和指针,但通过全局声明它们。如何在本地声明它们?

#include <stdio.h>
#include <stdlib.h>

所有函数的声明

int Addition();
int Subtraction();
int Devision();
int Multiplication();

全局变量声明,我想在本地声明它们

int p;
int n;
int *r=&n;
int *b=&p;

主功能开始

int main()
{
    int g,s;
    while (1)
    {
        printf("Please choose the Arithmetic operation: n");
        printf("Addition-> 1 nSubtraction-> 2 nDevision-> 3 nMultiplication-> 4 nExit-> 0n ");
        scanf("%d",&g);

用户通过输入一个数字(1,2,3,4或0表示退出(来选择算术运算(函数(

        if  (g==1)
        {
            s=Addition(r,b);
            printf("The addition result is %d+%d=%d",*r, *b, s);
        }
        else if  (g==2)
       {
          s=Subtraction(r,b);
          printf("The Subtraction result is %d-%d=%d",*r, *b, s);
       }
       else if  (g==3)
       {
         s=Devision(r,b);
         printf("The Devision result is %d/%d=%d",*r, *b, s);
       }
       else if  (g==4)
      {
        Multiplication(r,b);
        printf("The Multiplication result is %d/%d=%d",*r, *b, s);
      }
       else
      {
       break;
      }
     return 0;
   }
}

主功能结束。以下是所有其他功能

Addition()
{
    int x;
    printf("Ennter first nr: ");
    scanf("%d",&n);
    printf("Ennter second nr: ");
    scanf("%d",&p);
    x=n+p;
    return x;
}
Subtraction()
{
    int x;
    printf("Ennter first nr: ");
    scanf("%d",&n);
    printf("Ennter second nr: ");
    scanf("%d",&p);
    x=n-p;
   return x;
}
Devision()
{
    int x;
    printf("Ennter first nr: ");
    scanf("%d",&n);
    printf("Ennter second nr: ");
    scanf("%d",&p);
    x=n / p;
    return x;
}
 Multiplication()
 {
     int x;
     printf("Ennter first nr: ");
     scanf("%d",&n);
     printf("Ennter second nr: ");
     scanf("%d",&p);
     x=n * p;
     return x;
}

1( 如果需要,请刷新有关指针的知识并通过pointers传递参数。

间接或取消引用运算符*提供指针指向的对象的内容。

元或一元运算符&给出变量的地址。

2(避免全局变量在main后在本地声明它们。

3( 使用switch而不是if-else

#include <stdio.h>
#include <stdlib.h>
int Addition(int* n, int* p)
{
    int x;
    printf("Ennter first nr: ");
    scanf("%d",n);
    printf("Ennter second nr: ");
    scanf("%d",p);        
    x = *n + *p;    
    return x;
}
int Subtraction(int* n, int* p)
{
    int x;
    printf("Ennter first nr: ");
    scanf("%d",n);
    printf("Ennter second nr: ");
    scanf("%d",p);
    x = *n  - *p;  
    return x;
}
int main(void)
{  
    int n1 = 0;
    int n2 = 0;
    int *r = &n1;
    int *b = &n2;   
    int g,s;
    while (1)
    {
        printf("Please choose the Arithmetic operation: n");
        printf("Addition-> 1 nSubtraction-> 2 nDevision-> 3 nMultiplication-> 4 nExit-> 0n ");
        scanf("%d",&g);
        switch(g)
        {
            case 0:
               printf("ENDn");
               return 0;
            break;                
            case 1:
                s = Addition(r, b);
                printf("The addition result is: %d+%d=%dnn",n1, n2, s);
                break;
            case 2:
                s = Subtraction(r ,b);
                printf("The Subtraction result is: %d-%d=%dnn",*r, *b, s);
            break;
        }
    }
    return 0;
}

测试:

Please choose the Arithmetic operation:                                                                                                         
Addition-> 1                                                                                                                                    
Subtraction-> 2                                                                                                                                 
Devision-> 3                                                                                                                                    
Multiplication-> 4                                                                                                                              
Exit-> 0                                                                                                                                        
 2                                                                                                                                              
Ennter first nr: 5                                                                                                                              
Ennter second nr: 3                                                                                                                             
The Subtraction result is: 5-3=2                                                                                                                
Please choose the Arithmetic operation:                                                                                                         
Addition-> 1                                                                                                                                    
Subtraction-> 2                                                                                                                                 
Devision-> 3                                                                                                                                    
Multiplication-> 4                                                                                                                              
Exit-> 0                                                                                                                                        
 0                                                                                                                                              
END

我在全球范围内使用它们,因为我更容易调用和阅读它们。这就是为什么我想学习如何在本地声明它们。

很简单,只需在本地声明它们,如下所示:(无需用户输入代码即可专注于您的主要问题(

int main(void)
{   // locally declared
   double a = 4.5;
   double b = 10.8;
   double result_1, result_2, result_3, result_4;
   result_1 = add(a, b);       
   result_2 = sub(a, b);       
   result_3 = mul(a, b);       
   result_4 = div(a, b);

   return 0;
}
// example function (the others will be of similar form,
// a single return line with the appropriate math operator.
double add(double a, double b)//no pointers necessary
{
    return a + b;
}

如果你真的想使用指针,那么你可以实现函数通过参数返回结果:

void add(double a, double b, double *result)
{
    *result = a + b;
}

用法:(例如从主调用(

   add(a, b, &result_1);// passing the address of result_1      
                        // to allow the value at that address
                        // to be modified.

好吧,不确定这是否是你想要的,但让我建议你这段代码:

#include <stdio.h>
#include <stdlib.h>
int Addition(int* n, int* p)
{
    int x;
    printf("Ennter first nr: ");
    scanf("%d",n);
    printf("Ennter second nr: ");
    scanf("%d",p);
    x=*n+*p;
    return x;
}
int main()
{
    int n1=0;
    int n2=0;
    int *r=&n1;
    int *b=&n2;
    int g,s;
    while (1)
    {
        printf("Please choose the Arithmetic operation: n");
        printf("Addition-> 1 nSubtraction-> 2 nDevision-> 3 nMultiplication-> 4 nExit-> 0n ");
        scanf("%d",&g);
        if  (g==1)
        {
            s=Addition(r,b);
            printf("The addition result is %d+%d=%d",*r, *b, s);
        }
        return 0;
    }
}

如您所见,我们使用指针来存储用户写入的数字的值,因此您可以在调用函数后保留它们。

相关内容

  • 没有找到相关文章

最新更新