指针的最大值和最小值

时间:2015-09-05 07:35:16

标签: c pointers

我试图运行它,但它一直给我零值。这段代码有什么问题?

#include<stdio.h>

main(){
    int i,min,max,arr[3]={10,20,40};
    int *ptr_arr;
    ptr_arr=&arr[3];

    for(i=0;i<3;i++){
      if(max>*ptr_arr)
        max=*ptr_arr;
      if(min>*ptr_arr)
        min=*ptr_arr;
    }

    printf("The Maximum Number Is %d\n ",max);
    printf("The Minimum Number Is %d ",min);
}

4 个答案:

答案 0 :(得分:2)

ptr_arr=&arr[3];  // points to index which is beyond no. of index of array

由于arr的声明是arr[3]={10,20,40};所以它的有效索引是0,1 and 2。因此没有索引3(数组索引以0开头)。

minmax他们有什么价值?未初始化,您的代码如何提供正确的输出。

进行以下更改 -

     int min=arr[0],max=0;
     ...
     ptr_arr=arr;   // points to address of array's first element

在for循环中查看条件和增量指针 -

     if(max>*ptr_arr)  // change condition to max<=*ptr_arr
     ...
     ptr_arr++;

请参阅此处的示例 - https://ideone.com/r3nv8R

答案 1 :(得分:1)

  1. 代码未将minmax初始化为有意义的值。

    int min = INT_MAX;
    int max = -INT_MAX;
    

    让上面的宏可用#include <limits.h>

  2. ptr_arr被错误地初始化以指向数组之外。

    待办事项

    int * ptr_arr = arr; /* Here the array "decays" to address of its 1st element. */
    

    int * ptr_arr = &arr[0]; /* Explicitly use the address of the array 1st element. */
    
  3. 代码错过了增加ptr_arr以在循环时连续访问所有数组的元素。

    添加

    ++ptr_arr;
    

    作为循环的最后一个陈述。

  4. 还要仔细阅读您的代码,以便在比较中找到令人讨厌的错字。

    main()至少应该阅读int main(void)

答案 2 :(得分:0)

关于您的代码的几点说明:

你应该给minmax一个初始值(数组中的值),为什么?因为初始垃圾值可能超出了您的数组值(例如9999),这会产生错误的结果,因为您的数组没有这样的值。

另外,我不确定你为什么需要ptr_arr

以下是您的代码的修改版本:

#include<stdio.h>

int main(){
    int i,min,max,arr[3]={10,20,40};
    max = arr[0]; //initialize 'max' to be the first element of the array
    min = arr[0]; //initialize 'min' to be the first element of the array
    for(i=0;i<3;i++){
      if(arr[i] >= max)
        max = arr[i];
      if(arr[i] <= min)
        min = arr[i];
    }

    printf("The Maximum Number Is %d\n ",max);
    printf("The Minimum Number Is %d ",min);
    return 0;
}

另请注意我在if声明中添加了<=>=

答案 3 :(得分:0)

经过测试和工作:

#include <stdio.h>

int main(void) {
  int i = 0,min ,max,arr[3]={20,40,10};

  int *ptr_arr;
  ptr_arr=&arr[0];
  min = max = arr[0];

  for(i=0;i<3;i++){

   if(max < ptr_arr[i]) {
     max=ptr_arr[i];
   }

   if(min>ptr_arr[i]){
     min=ptr_arr[i];
   }
 }

 printf("The Maximum Number Is %d\n ",max);
 printf("The Minimum Number Is %d ",min);

}

<强>输出:

  

最大数量是40

     

最小数量是10