//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;
}
1277223 于 2011-11-28 15:15:54发表:
...
Syah 于 2011-11-27 08:48:22发表:
在学,不过你的问题偶不知
残云断梦 于 2011-11-27 00:23:26发表:
min=p+1; //这个有什么作用 求解
这句话的意思是,指针min的地址 等于 指针p的地址加1。
例:
如果p的地址等于0x0000;
那么min的地址等于0x0004;
实际地址加了4,因为p是指向int类型的指针,int占4个字节(32位的环境),所以指针地址是以4个字节向前后移动的.
另外,你的程序写得太乱,而且写得不对。