#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。