如果需要返回两种不同的数据,即出现的次数和出现的下标,可以用一个指向了包含这两种数据(一个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相同的数的在数组中的下标的指针
}