代码之家  ›  专栏  ›  技术社区  ›  Klayd Pro

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

  •  -4
  • Klayd Pro  · 技术社区  · 8 年前

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

    #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-> 0\n ");
            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;
    }
    
    3 回复  |  直到 8 年前
        1
  •  0
  •   sg7 Krafty Coder    8 年前

    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-> 0\n ");
            scanf("%d",&g);
    
            switch(g)
            {
                case 0:
                   printf("END\n");
                   return 0;
                break;                
                case 1:
                    s = Addition(r, b);
                    printf("The addition result is: %d+%d=%d\n\n",n1, n2, s);
                    break;
                case 2:
                    s = Subtraction(r ,b);
                    printf("The Subtraction result is: %d-%d=%d\n\n",*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
    
        2
  •  0
  •   ryyker    8 年前

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

    非常简单,只需在本地声明它们,如图所示:(无需用户输入代码来关注主要问题)

    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;
    }
    

    用法:(例如从main调用)

       add(a, b, &result_1);// passing the address of result_1      
                            // to allow the value at that address
                            // to be modified.
    
        3
  •  -1
  •   kayess    8 年前

    嗯,不确定这是否是您所要求的,但我建议您使用以下代码:

    #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-> 0\n ");
            scanf("%d",&g);
    
            if  (g==1)
            {
                s=Addition(r,b);
                printf("The addition result is %d+%d=%d",*r, *b, s);
            }
    
            return 0;
        }
    }
    

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