红联Linux门户
Linux帮助

急!!!求C语言高手!!!

发布时间:2011-11-26 19:27:18来源:红联作者:348242152
[font=微软雅黑]求该程序中 min=p+1; 该语句有什么作用 求高手解答[/font]
//5*5矩阵 最大元素放在中间 四角依次从小到大 放置最小的四个数 (从左到右 从上到下)
#include
int i,j;
void main()
{
void chag(int *p);
int a[5][5],*p;
printf("请输入5*5的数组:\n");
for(i=0;i<5;i++)
scanf("%5d%5d%5d%5d%5d",&a[i][0],&a[i][1],&a[i][2],&a[i][3],&a[i][4]);
p=a[0];
chag(p);
printf("改变后的数组为:\n");
for(i=0;i<5;i++)
printf("%5d %5d %5d %5d %5d\n",a[i][0],a[i][1],a[i][2],a[i][3],a[i][4]);
}

void chag(int *p)
{
int temp;
int *max,*min;
max=min=p;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
if(*max<*(p+i*5+j))
max=p+i*5+j;
if(*min>*(p+i*5+j))
min=p+i*5+j;
}
temp=*(p+12);
*(p+12)=*max;
*max=temp;

temp=*p;
*p=*min;
*min=temp;
min=p+1; //这个有什么作用 求解

for(i=0;i<5;i++)
for(j=0;j<5;j++)
if((*min>*(p+i*5+j))&&(*(p+i*5+j)!=*p)&&(*(p+i*5+j)!=*(p+4)))
min=p+i*5+j;
temp=*(p+4);
*(p+4)=*min;
*min=temp;
min=p+1; //这个有什么作用 求解

for(i=0;i<5;i++)
for(j=0;j<5;j++)
if((*min>*(p+i*5+j))&&(*(p+i*5+j)!=*p)&&(*(p+i*5+j)!=*(p+4)))
min=p+i*5+j;
temp=*(p+20);
*(p+20)=*min;
*min=temp;
min=p+1; //这个有什么作用 求解

for(i=0;i<5;i++)
for(j=0;j<5;j++)
if((*min>*(p+i*5+j))&&(*(p+i*5+j)!=*p)&&(*(p+i*5+j)!=*(p+4))&&(*(p+i*5+j)!=*(p+20)))
min=p+i*5+j;
temp=*(p+24);
*(p+24)=*min;
*min=temp;
}
文章评论

共有 3 条评论

  1. 1277223 于 2011-11-28 15:15:54发表:

    ...

  2. Syah 于 2011-11-27 08:48:22发表:

    在学,不过你的问题偶不知

  3. 残云断梦 于 2011-11-27 00:23:26发表:

    min=p+1; //这个有什么作用 求解
    这句话的意思是,指针min的地址 等于 指针p的地址加1。
    例:
    如果p的地址等于0x0000;
    那么min的地址等于0x0004;
    实际地址加了4,因为p是指向int类型的指针,int占4个字节(32位的环境),所以指针地址是以4个字节向前后移动的.
    另外,你的程序写得太乱,而且写得不对。