指针 (卑微醇醇初学指针的崩溃啊)
Posted zhmlzhml
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指针 (卑微醇醇初学指针的崩溃啊)相关的知识,希望对你有一定的参考价值。
用指针实现整行数组的交换:
用的是memcpy
-
-
int main()
-
{
-
int a[2][2] = {1,2,3,4};
-
int t[2];//临时空间。
-
int i,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行中。
-
}注意临时空间定义的也是个数组,但使用的时候也是指针一个指针指向一个二维数组#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])这样每一行往那里传。可以实现每一行中的比较。
以上是关于指针 (卑微醇醇初学指针的崩溃啊)的主要内容,如果未能解决你的问题,请参考以下文章