c语言,怎么在调用的子函数中返还两种不同数据,我还想输出数组中指定数输出现的次数,用count统计,各位可以看看吗

img


img


c语言,怎么在调用的子函数中返还两种不同数据,我还想输出数组中指定数输出现的次数,用count统计,各位可以看看吗

如果需要返回两种不同的数据,即出现的次数和出现的下标,可以用一个指向了包含这两种数据(一个int类型的出现次数,一个出现的下标的数组)的结构指针来作为返回值;

如果不使用结构可以只用指向一个存储了指定下标的内存的int指针来作为返回值,下面的代码是第二种方法的一个实现,供参考:

#include <stdio.h>
#include <stdlib.h> //为malloc()函数提供头文件 
#include <string.h> //为memset()函数提供头文件 

int * outcount(int * ,int,int);

int main(void){
    
    int n,x,a[10],i,count;
    int *result;
    count=0;
    printf("请输入一个正整数: ");
    scanf("%d",&n);
    
    printf("输入数组的数据:");
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    
    printf("输入x=");
    scanf("%d",&x);
    result=outcount(a,n,x);
    
    i=0;
    while(result[i]!=-1&&i<10){ //计算有多少个x在数组中 
        i++; 
    }
    
    //打印结果 
    if(i>0){
        printf("%d出现的次数为:%d\n",x,i); 
        i=0;
        printf("在数组中出现的下标位置为:"); 
        while(result[i]!=-1&&i<n){
            printf("%d ",result[i]); 
            i++;
        }
    }else if(i==0){
        printf("Not found\n");
    }
    free(result);
    
    return 0; 
}

int * outcount(int * p,int n,int x){
    
    //  https://blog.csdn.net/m0_66991837/article/details/123857480
    //  https://blog.csdn.net/yetaodiao/article/details/127366671
    int* posArr = (int *)malloc(n*sizeof(int)); //分配存储最多10个数组下标的内存 ,以便在main函数中能访问到 
    if(posArr==NULL){
        printf("分配内存失败,程序退出!\n");
        exit(-1);
    }
    //  https://www.jb51.net/article/223385.htm
    memset(posArr,-1,n*sizeof(int));  //把内存的数据初始化为-1,默认表示没有找到一个指定的数x的下标 
    
//    for(int i=0;i<n;i++){
//        printf("%d ",posArr[i]);
//    }
//    int t;
//    scanf("%d",&t);
    
    
    int i,count=0,pos=0;
    for(i=0;i<n;i++){
        if(p[i]==x){
            posArr[pos]=i;//把数组中和x相同的数的下标依次存入posArr指针指向的内存中 
            pos++;
        //    count++;
        }
    }
    
    return posArr; //返回存储了和指定的数x相同的数的在数组中的下标的指针 
}

img