c++中如何使用指针输入二维数组


void get(int r,int c,int *ptr){
int i,j,k;

cout<<"Enter Elements of a matrix:"<<endl;
for(i=0;i<r;i++){
for(j=0;j<r;j++){
cin>>k;
*(ptr + (i*c) + j)=k;
}
}
}

这是我的代码。

*(ptr + (i*c) + j)=k;

谁能解释一下上面这行代码是如何工作的?

指针是存储信息的内存地址。这个地址采用数字的形式。该数字使用多少位取决于平台。

由于这个地址是一个数字,我们可以用它做数学运算。

*(ptr + (i*c) + j)=k;

当我们理解了操作符优先级并使用了空格时,可以是以下形式:

*(ptr + i * c + j) = k;

ic的乘积;然后j到指针。然后我们对整个东西进行解引用,并将k的值复制到其中。

与数组的关系如下两行代码是等价的:

arr[1] = 456;
*(arr + 1) = 456;

如果将多维数组作为单个内存块处理,则需要将列宽度乘以向下的行数,然后在数据上添加多少列。

也许视觉效果会有所帮助。

让我们考虑一个3x3的二维数组。我们将它初始化为1-9

1  2  3
4  5  6
7  8  9

现在,我们可以把它看作一个3x3数组,或者…我们可以认为它是一个有9个元素的一维数组。

1  2  3  4  5  6  7  8  9

如何访问5?

嗯,在第一种情况下,我们会使用:arr[1][1]。在第二种情况下,我们知道5位于索引4,那么我们如何将[1][1]转换为[4]呢?

给定模式arr[row][col],我们可以将row乘以每行的长度,然后加上col。所以arr2d[1][1]变成了arr1d[1 * 3 + 1]。瞧,1 + 3 + 1就是4

用更大的数组试试:

1  2  3  4  5
6  7  8  9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

要获取值18,我们将访问:arr2d[3][2],但如果将其视为单维数组:arr1d[3 * 5 + 2],即arr1d[17],这使我们…18.

相关内容

  • 没有找到相关文章

最新更新