新人简单指针有关问题求热心人解释
新人求助简单指针问题求热心人解释C/C++ code#includestdio.hmain()/*问题是用指针方法求这个数组中的最
新人求助简单指针问题求热心人解释
C/C++ code#include<stdio.h>main() /*问题是用指针方法求这个数组中的最大和最小的元素*/{ int a[10]={1,2,3,4,5,6,7,8,9,10},*max,*min; for(max=a;max<a+9;max++) if(*max<*(max+1)) /*这句和if(a[n]<a[n+1]) 是不是等价的*/ *max=*(max+1); printf("%d\n",*max); for(min=a;min<a+9;min++) /*如果定义*p;p=&a;可不可以认为*p和a的值是相等的*/ if(*min>*(min+1)) *min=*(min+1); printf("%d\n",*min); /*我对指针的用法不是很了解,请热心人指点一下*/ /*到底犯了哪些毛病*/ }
[解决办法]当求完max之后,数组a的内容就已经发生了改变,如果a={1,2,3}的话,那么当print(max)时, max指向的是a[2],a={2,3,3}, 那么下次, min = a之后, *min=2, *(min+1)=3, *min=*(min+1)不做,之后,min=a+1, 那么, *min=3, 因为*(min+1)=3, 所以*min>*(min+1)不成立,所以min指向a[1], *min=3, 所以最后输出:
3
3
a={1,2,3,...,10}也是一样的, 为了避免一些比较奇怪的问题,建议lz尽量不要*min=*(min+1),这样做会本地更改,导致问题复杂, lz还是应该把重点放在算法而不是语法上。