}
注意临时空间定义的也是个数组,但使用的时候也是指针
一个指针指向一个二维数组
#include<stdio.h>
#include<string.h>
int sub[5];
int main()
{
float *search(float(*p)[4]);
void first(float(*po)[4]);
float (*po)[4];
float *p;
char a[4][20];
float b[4];
float score[4][4];//4,5
for(int i=0;i<4;i++)
{
scanf("%s",a[i]);//注意这里可以将一个字符串放进一个a[i]中。
scanf("%f",&b[i]);
for(int j=0;j<5;j++)
scanf("%f",&score[i][j]);
}
po=score;//其实是将一个二维数组的第一行第一个的地址给了Po,所以传的时候相当于传了整个数组。故底下可以使用*(*(p+i)+j)来实现对每个数的取值
if(choose==1)
first(po);
函数是:void first(float(*p)[4])//这个东西就是传一整行的
{
for(int i=0;i<=3;i++)
for(int j=0;j<=3-i;j++)
{
if(*(*(p+j)+0)<(*(*(p+j+1)+0)))
{
/*int a=*(p+j);
*(p+j+1)=*(p+j);
*(p+j)=a;
*/
memcpy(sub,*(p+j),sizeof(*(p+j)));//这个函数有他的专场的!
memcpy(*(p+j),*(p+j+1),sizeof(*(p+j)));
memcpy(*(p+j+1),sub,sizeof(*(p+j)));
/*
memcpy(t,a[0], sizeof(a[0]));//将第0行的数据放到临时空间。
memcpy(a[0], a[1], sizeof(a[0]));//将第1行数据放到第0行中。
memcpy(a[1], t, sizeof(a[0])); //将保存到t中的数据,即原本的第0行数据,放到第1行中。
*/
}
}
for(int j=0;j<4;j++)
for(int i=0;i<5;i++)
printf("%f",*(*(p+j)+i));
}
注意地下有这一句:
for(int i=0;i<4;i++)
p=search(score+i);
函数是:float *search(float(*p)[4])
这样每一行往那里传。可以实现每一行中的比较。