将指针作为函数的参数传递

时间:2019-01-22 11:43:26

标签: c++

我真的很困惑,下面的代码中需要指针的帮助,代码是关于从给定数组中查找最大值和最小值。我知道也可以通过使用结构来解决问题但我想了解指针的使用

#include<stdio.h>
int max2,min2,max,min,maximum,minimum;
int Maxmin(int a[],int *max,int *min,int i,int j)
{
    if(i==j)
    {
        return *max=*min=a[i];
    }
    else if(i==j-1)
    {
        if(a[i]<a[j])
        {
            *max=a[j];
            *min=a[i];
        }
        else
        {
            *max=a[i];
            *min=a[j];
        }
    }
    else
    {
        int mid=(i+j)/2;
        Maxmin(a,max,min,i,mid);
        Maxmin(a,&max2,&min2,mid+1,j);

    }
    if(*max<max2)
    {
        *max=max2;
    }

    if(*min>min2)
    {
        *min=min2;
    }

}

int main()
{
    int a[]={4,30,2,100,230};
    Maxmin(a,&max,&min,0,4);
    printf("%d %d",max,min);
}

2 个答案:

答案 0 :(得分:2)

在呼叫方:

maxmin是int变量。 &max&min是这些int变量的内存地址。

从被叫方:

int *maxint *minMaxmin中被声明为指向int的指针。让我们看一下,好像指针包含一个内存地址。指向int的指针包含一个int变量的内存地址。

*max*min是访问内存地址内容(取消引用指针)的方法。由于您有一个指向int的指针,因此您将从该操作中读取一个int。

此代码的关键是要知道,如果您在*max内修改*minMaxmin,则将更改max和{{ 1}},因为您直接使用这些全局变量的内存内容。

答案 1 :(得分:0)

首先,您需要区分*和用于指针的符号以及它们的用法。

*运算符可以以两种方式使用

  1. *,可用于定义指针         例如。 int * ptr这个东西将创建一个指针,并可以存储int类型的地址

  2. *作为取消引用运算符printf("%d",*ptr);打印值 指针将存储谁的地址。
    例如。 int a = 10; int *ptr=&a; printf("%d",*ptr);取消引用ans指针的值会将其打印为10

    指针方面的

    &仅用作某些变量的地址。

现在,在您的代码中,当您使用*max*min时,它指的是函数max,min中使用的指针的值,该值最终指的是全局变量,因为您已经传递了全局变量的地址在主要功能上 当在函数&max2&min2中使用&时,表示全局变量的地址。

该代码可能给出了错误的输出,因为它比较了可能具有垃圾值的所有四个全局变量的值。因此,最好像这样int max=-10000 ,min=10000 ,min2=10000 ,max2=-10000来初始化全局变量。这将始终给出正确的输出。