指针定义一个函数,将数组中最大值及最小值交换位置

#include<stdio.h>
int change<int *p,int t,int h>
{
int i,j;
t=p[0];h=p[0];
for(i=0;*p!='\0';i++)
{
if(*p[i]>*p[0])
t=p[i];
}
for(i=0;*p!='\0';i++)
{
if(*p[i]<*p[0])
t=p[i];
}
return *p;
}
int main()
{
int *p={9,1,2,7,4,5,6,0,8};
int t,h;
change(*p,t,h);
printf("%d",*p);
}
哪边错的啊,求指教

第1个回答  2013-12-15
#include<stdio.h>

//尽量不改动你的
int change(int *p,int bufSize)
{
int i=0;
int *t,*h,*temp;
t=p;
h=p;
temp=p;
//max
// for(i=0;*p!='\0';i++)//注意:元素0的值等于'\0',所以这种判断会漏掉0后边的元素
for (i=0;i<bufSize;i++)
{
if(*p>*t)
{
t=p;
}
p++;
}
printf("max=%d\n",*t);

p=temp;//reset first

//min
// for(i=0;*p!='\0';i++)
for (i=0;i<bufSize;i++)
{
if(*p<*h)
{
h=p;
}
p++;
}
printf("min=%d\n",*h);

i = *t;
*t = *h;
*h = i;

return *p;
}

int main()
{
int i=0,DataSize=0;
int changeData[]={9,1,2,7,4,5,6,0,8};
int *p=changeData;

DataSize=sizeof(changeData)/sizeof(int);

change(p,DataSize);

//printf("%d",*p); //没有这种写法,打印出来的只是地址值而已

for (i=0;i<DataSize;i++)
{
printf("%d ",*p);
p++;
}

//建议写成这样
// for (i=0;i<DataSize;i++)
// {
// printf("%d ",changeData[i]);
// }

printf("\n");
return 1;
}本回答被提问者采纳
第2个回答  2013-12-15
没看懂你写的。下面是我写的,看一下吧
#include<stdio.h>
void change(int *p, int num, int t, int h)
{
int i = 0;
t = h = 0;

for (i = 1; i < num; i++)
{
if (p[t] < p[i])
{
t = i;
}
if (p[h] > p[i])
{
h = i;
}
}

i = p[t];

p[t] = p[h];
p[h] = i;
}
int main()
{
int pp[9] = { 9, 1, 2, 7, 4, 5, 6, 0, 8 };

int *p = pp;
int t = 0, h = 0;
change(p, 9, t, h);

for (int i = 0; i < 9; i++)
{
printf("%d", p[i]);
}
}本回答被网友采纳
相似回答