繁体   English   中英

数组的最大值和最小值(C 指针)

[英]Max and min value of array (C pointer)

#include<stdio.h>

void find(int a[], int n, int *min, int *max){
    int tmp, i, j;
    for(i = 0; i < n; i++){
        for(j = i + 1; j < n; j++){
            if(a[i] < a[j]){
                tmp = a[i];
                a[i] = a[j];
                a[j] = tmp;
            }
        }
    }
    *max = *a;
    *min = *(a + n);
    
}

int main(){
    int a[100];
    int n, *min, *max;
    printf("husnegtiinn elementiin toog oruul: ");
    scanf("%d", &n);
    for(int i = 0; i < n; i++){
        scanf("%d", &a[i]);
    }
    find(a, n, min, max);
    printf("ih ni : %d \nbaga ni : %d", *max, *min);
    
}

我正在尝试对用户的数组进行排序并获取这些指针中的最小值和最大值。 我很难弄清楚如何通过函数传递指针。 我在这里错过了什么吗?

  • *(a + n)在数组中的初始化元素之外。 *(a + n - 1) (或更简单a[n-1])是您为其赋值的最后一个元素。
  • minmax不应该是int* s,而是int s。

例子:

#include<stdio.h>

void find(int a[], int n, int *min, int *max){
    if(n < 1) return;

    for(int i = 0; i < n; i++){
        for(int j = i + 1; j < n; j++){
            if(a[i] < a[j]){
                int tmp = a[i];
                a[i] = a[j];
                a[j] = tmp;
            }
        }
    }
    *max = a[0];
    *min = a[n - 1]; // the last element
    
}

int main(){
    int a[100];
    int n, min, max; // corrected types
    printf("husnegtiinn elementiin toog oruul: ");

    if(scanf("%d", &n) != 1 || n < 1 || n > 100) return 1;

    for(int i = 0; i < n; i++){
        scanf("%d", &a[i]);
    }
    find(a, n, &min, &max); // take the addresses of `min` and `max`
    printf("ih ni : %d \nbaga ni : %d", max, min);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM