C++ 使用指针的二维数组

C++ 使用指针的二维数组,c++,arrays,pointers,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]; } } 难道不是吗 cin>>*val[i*c+j]; 因为我取的是给定内存位置的值,而不是地址?c是

这是我的教科书中给出的用指针演示二维数组的程序:

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];
    }
}
难道不是吗

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

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

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

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

关于第二个问题,访问此“2D”数组中的元素的正确方法是

不是


这是因为根据定义,
ptr[n]
相当于
*(ptr+n)
,因此已包括解引用。另外,对于一行主要的“2D”数组,每个元素的相对位置由<代码> > *C+J <不>代码> I*J+C</代码> >因为每次行数增加时,索引需要跳过“代码> C++ <代码> >。< /P> < P>在C++中为指针变量赋值,在变量名前面使用*。但是使用数组时,不需要在变量名前面使用*来为数组赋值。

如果a是指针,通常是a=6和a=&b。但是对于指针数组,为什么它是val[ic+j]=1而不是val[ic+j]=1?我正确地存储了值。对不起,我不理解第二点。我在赋值,对吗?所以它不应该是:*a=2
cin
接受的不是指针,而是引用。表达式<代码> PTR[n] < /Cord>已被取消引用,因此不需要额外的<代码> */Cord>。我的意思不是指针,而是在C++中为动态数组(使用指针调用数组)赋值。据我所知,int指针的实现不同于动态数组。如果我错了,请纠正我。
cin>>*val[i*c+j];
val[i * c + j]
*val[i * j + c]