使用指针的2D数组

时间:2014-12-13 05:12:44

标签: c++ arrays pointers

这是我教科书中用于说明使用指针的二维数组的程序:

int *val,r,c;//r= number of rows,c= number of columns
val=new int[r*c]
for(int i=0;i<r;i++)
{
    for(int j=0;j<c;j++)
    {
        cin>>val[i*c+j];
    }
}

这里虽然他们正在讨论2D数组,但指针仍然是1D。其次,new在free store中分配指定大小的指针val

cin>>val[i*c+j];

不应该

cin>>*val[i*c+j];

因为我为给定的内存位置而不是地址取值?

3 个答案:

答案 0 :(得分:2)

严格地说,val不是你所说的二维数组;它确实是一维的。但是,它可以被视为一个二维数组展平row-major order中的一维数组。

关于你的第二个问题,正确的方法是访问这个&#34; 2D&#34;数组是

val[i * c + j]

*val[i * j + c]

这是因为ptr[n] 定义等同于*(ptr + n),因此已经包含了取消引用。此外,对于行专业&#34; 2D&#34;数组每个元素的相对位置由i * c + j而不是i * j + c给出,因为每次增加行数时,索引都需要向前跳过c

答案 1 :(得分:0)

c是每行的大小。因此行0val[0]开始(0 * c),行1val[c]开始(1 * c),行2从{{1开始}}。公式是正确的。

答案 2 :(得分:0)

在c ++中,为变量名前面的*指针变量赋值。但是要使用数组,您不需要在变量名前面使用*来为数组赋值。