关于指针的疑问

来源:百度知道 编辑:UC知道 时间:2024/05/26 09:10:30
main()
{void zhihuan(int *p);
int a[3][3],i,j,*p;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
p=&a[0][0];
zhihuan(p);
}
void zhihuan(int *p)
{int i,j,t;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{t=(p+3*i+j);
*(p+3*i+j)=*(p+3*j+i);
*(p+3*j+i)=t;}
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
printf("%d",*(p+i+j));
printf("\n");
}
}
}
这个是一个能正常运行的程序 但是我改动一下void zhihuan(int *p)
{int i,j,*t;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{t=p+3*i+j;
p+3*i+j=p+3*j+i;
p+3*j+i=t;}
把t也改成指针变量为什么就错了 难道不一样么 没改动之前记录数值 改动之后记录地址

不一样.
改前你交换的是指针指向的地址里的值,是地址结合.
改之后你只交换了形参(指针)的值,是数值结合,当函数调用结束后形参释放了,不能传回实参。

指针里边存的是地址数值,不是变量数值。指针和一般变量不能互操作