把数组作为函数参数在Dev-c++上运行出现的疑惑

#include<stdio.h>
void maxin(int a[]);
int main(){
    int a[10]={1,2,3,4,5,6,7,8,9,45};
    maxin(a);
}
void maxin(int a[])
{
    int i,*p,*q;      //p--max;q--min
    p=a;
    q=a;
    for(i=0;i<10;i++)
    {
        if(*p<a[i])
        *p=a[i];     //ruo  *p=a[i] ->wrong
        if(*q>a[i])
        q=&a[i];
    }
    printf("max=%d,min=%d",*p,*q);
}

有哪位大佬知道为什么最后*q也为45呢,而且调试时*q随*p的变化而变化

你的if语句下面一直在给*p*q赋值,而且如果这样一个一个去比较你还需要一个参数去记录他的最值

*p=a[i];这句会一直向a[0]赋值,最后根据你的逻辑a[0]会变成45,if(*q>a[i])也不会进,因为*q==a[i]一直成立,最后q=&a[i]不会进,最后q指针指向a[0]

原理和python中,一个list修改后另一个list跟随变动是一样的,p和q只是指针,它们并不是两个数组。见:深拷贝&浅拷贝。你这种“拷贝”属于典型的浅拷贝,浅拷贝的特点就是,表面上是用同一元素初始化了两个不同引用/指针,实际上是同一个对象。

要对数组进行深拷贝,你需要malloc、memcpy和free。