使用指针与不使用指针的区别以及int (*compare)(int a,int b)的用法
来源:互联网 发布:外汇模拟软件下载 编辑:程序博客网 时间:2024/05/16 16:05
同样的功能效果
不使用指针代码如下:
/*指针与普通代码的比较*/
#include<stdio.h>
#define N 40
int ReadScore(int score[])
{
int i = -1;
do{
i++;
printf("输入成绩:");
scanf("%d",&score[i]);
}while(score[i]>=0);
return i;
}
void PrintScore(int score[],int n)
{
int i;
for(i = 0;i<n;i++)
{
printf("%4d",score[i]);
}
printf("\n");
}
void AscendingSort(int a[],int n)
{
int i,j,k,temp;
for(i = 0;i<n-1;i++)
{
k = i;
for(j = i+1;j<n;j++)
{
if(a[j]<a[k])
{
k = j;
}
}
if(k!=i)
{
temp = a[k];
a[k] = a[i];
a[i] = temp;
}
}
}
void DescendingSort(int a[],int n)
{
int i,j,k,temp;
for(i = 0;i<n-1;i++)
{
k = i;
for(j = i+1;j<n;j++)
{
if(a[j]>a[k])
{
k = j;
}
}
if(k!=i)
{
temp = a[k];
a[k] = a[i];
a[i] = temp;
}
}
}
int main(){
int score[N],n;
int order;
n = ReadScore(score);
printf("总计人数:%d\n",n);
printf("输入1升序,输入2降序:");
scanf("%d",&order);
printf("原成绩:\n");
PrintScore(score,n);
if(order == 1)
{
AscendingSort(score,n);
printf("升序:\n");
}else{
DescendingSort(score,n);
printf("降序\n");
}
PrintScore(score,n);
return 0 ;
}
使用指针代码如下:
#include<stdio.h>
#define N 40
int ReadScore(int score[]) //录入成绩,没的说
{
int i = -1;
do{
i++;
printf("输入成绩:");
scanf("%d",&score[i]);
}while(score[i]>0);
return i;
}
void PrintScore(int score[],int n) //输出成绩
{
int i;
for(i=0;i<n;i++)
{
printf("%4d",score[i]);
/*************
%4d是printf的格式化参数,表示输出一个整型数值,输出宽度为4,且右对齐,如:
printf( "%4d", 1 );
1 //输出1的前边有3个空格,补齐4位的宽度
printf( "%4d", 11);
11 //输出11前边有2个空格,补齐4位的宽度
printf( "%4d", 11111 );
11111 //因为超过了4位,所以前边没有空格
如果要左对齐,则改为 %-4d
*********************/
}
printf("\n");
}
void SelectionSort(int a[],int n,int (*compare)(int a,int b)) //交换法排序
{
int i,j,k,temp;
for(i = 0;i<n-1;i++)
{
k = i;
for(j=i+1;j<n;j++)
{
if((*compare)(a[j],a[k])) //调用指针compare指向的函数
{
k = j;
}
}
if(k!=i)
{
temp = a[k];
a[k] = a[i];
a[i] = temp;
}
}
}
int Asending(int a,int b) //使用数据升序排序
{
return a<b;
}
int Descenging(int a,int b)
{
return a>b;
}
int main()
{
int score[N],n;
int order;
n = ReadScore(score);
printf("总人数:%d\n",n);
printf("升序输1,降序输2:\n");
scanf("%d",&order);
printf("原顺序:\n");
PrintScore(score,n);
if(order == 1){
SelectionSort(score,n,Asending);
printf("升序:");
}else{
SelectionSort(score,n,Descenging);
printf("降序:\n");
}
PrintScore(score,n);
return 0;
}
/**********************
int (*compare)(int a,int b)表示:compare --> * --> () --> int,告诉我们形参compare是一个指针变量,指向一个两个整形形参、返回值为整型的函数
而int *compare(int a,int b)表示:compare --> () --> * -->int,它声明的是一个两个整型参数并返回整型指针的函数
函数SelectionSort()用函数指针作为形参,既可以指向函数Asending(),也可以指向Descenging(),
主函数里,用户输入1,则用函数名Asending作为函数实参调用SelectionSort(),将指向函数Asending()的指针传给SelectionSort(),使数组a按升序排序
************************/
- 使用指针与不使用指针的区别以及int (*compare)(int a,int b)的用法
- int const 与 const int区别 以及指针相关
- 初学 c语言 关于指针------什么是指针 int *a 与 *a的区别
- 关于指针* —— int a; int* a; int** a; int (*a)[10]; int (*a)(int)区别
- int*与(int*)的区别
- C语言,数组与指针:int (*)p[4]; int *q; int a[4]; int b[3][4];
- int *const 和 int const*的区别 (指针 和 const)
- c++指针类型int *和int(*)[5]的区别
- const int *a, int const *a,int * const a,区别,指针数组,数组指针,声明与定义
- const int *a, int const *a,int * const a,区别,指针数组,数组指针,声明与定义(转)
- const int *a, int const *a,int * const a,区别,指针数组,数组指针,声明与定义
- const int *a, int const *a,int * const a,区别,指针数组,数组指针,声明与定义
- const int *a, int const *a,int * const a,区别,指针数组,数组指针,声明与定义
- const int *a, int const *a,int * const a,区别,指针数组,数组指针,声明与定义
- const int *a, int const *a,int * const a,区别,指针数组,数组指针,声明与定义
- const int *a, int const *a,int * const a,区别,指针数组,数组指针,声明与定义
- const int *a, int const *a,int * const a,区别,指针数组,数组指针,声明与定义
- const int *a, int const *a,int * const a,区别,指针数组,数组指针,声明与定义
- linux ss
- [小知识点]绝对路径与相对路径.
- java——强制类型转换数据溢出的结果计算
- 导航定位(利用锚点和jquery定位)
- Python-字典的基本操作
- 使用指针与不使用指针的区别以及int (*compare)(int a,int b)的用法
- nju1017 Heresy
- SpringMVC与Struts2的对比
- SQL Server存储过程创建和修改
- [opencv]goodFeaturesToTrack函数详细注释
- Android Studio 添加Assets目录
- Group|Collective Activity Recognition
- bzoj3688
- Android 音乐播放器 按系统返回键退出后,重新打开,两种声音的问题