关于指针表示

来源:百度知道 编辑:UC知道 时间:2024/05/28 20:12:12
void move (int *matrix)
{
int i,j,k;
for(i=0;i<3;i++)
for (j=0;j<i;j++)
{
k=*(matrix+i*3+j);
*(matrix+i*3+j) = *(matrix + j*3 + i);
*(matrix + j*3 + i) = k;
}
}

为什么这样表示 *(matrix+i*3+j);
是什么意思
*(matrix+i*3+j); 可以用什么来代替

matrix是一个int类型的指针,*matrix是当前指针所指向的空间内存储的值

那么,matrix+1就是matrix这个指针所指向的内存地址加一个int在内存中占据的位长所得的地址,也可以理解为一个int数组的第二项。

那么matrix+i*3+j就是指matrix数组中第i*3+j+1项的地址
那么*(matrix+i*3+j)就是指matrix数组中第i*3+j+1项的值

至于为什么要这样计算,是因为源程序是将一个一维数组当作一个矩阵来使用,矩阵是二维的,所以用i与j迭代

可以用matrix[i*3+j]代替

这是用指针表示,你不用指针,可以达到相同的效果!
但是用指针和不用指针,这里的函数的传值就不一样了;用指针,传的是参数的地址,函数对变量直接操作;
如果不用指针,参数只是拷贝了一份给函数,函数并不能对变量直接操作;

c++使用指针传递数组,
定义一个数组M[3][j],把这个数组传递给这个函数,函数直接操作指针指向的内存,并且依次操作每一个数组元素(通过地址偏移)。

matrix应该是这样的一个东西
int matrix[3][j];
懂了吗?

那样表示应该指的时二维数组i*3表示数组的行j表示列