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

Call and Return function using pointers locally in c

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

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

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

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

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

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

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

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

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

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.

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