读书人

新人简单指针有关问题求热心人解释

发布时间: 2012-07-29 15:26:14 作者: rapoo

新人求助简单指针问题求热心人解释

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还是应该把重点放在算法而不是语法上。

读书人网 >C语言

热点推荐