c/c++语言开发共享为什么在分配指向2D数组的指针时需要指定行?

当没有提到2D数组的行时,编译器声明“从不兼容的指针类型赋值”,我一直认为没有括号的数组意味着第一个元素的地址,在这种情况下是元素的地址twodstring [0] [0]

当提到行时,编译器没有说出错误,我想知道为什么会这样?

#include int main() { char onedstring[]={"1D Array"}; char twodstring[][5]={"2D","Array"}; char *p1,*p2; p1=onedstring; p2=twodstring; p2=twodstring[1]; } 

    二维数组

     char a[M][N]; 

    可以使用typedef以下列方式声明

     typedef char T[N]; T a[M]; 

    因此,可以声明指向数组a的第一个元素的指针

     T *p = a; 

    其中Tchar[N]类型的别名。 现在我们可以编写反向替换

     char ( *p )[N] = a; 

    那是二维数组的元素是一维数组。

    这个宣言

     char ( *p )[N] = a; 

    相当于

     char ( *p )[N] = &a[0]; 

    其中a[0]的类型为char[N] 。 所以指针指向数组的第一个“行”。

    取消引用指针,您将获得char[N]类型的对象。

    注意可以声明二维数组

     char ( a[M] )[N]; 

    所以用一维数组声明符替换a[M]代替你得到的指针

     char ( a[M] )[N]; char ( *p )[N] = a; 

    如果你要声明这样的指针

     char *p1; 

    那么你可以写一些例子

     p1 = a[1]; 

    在该表达式中a[1]char[N]类型的一维数组。 使用表达式作为初始化程序,数组将转换为指向其第一个元素char *指针。

    所以这个表达式声明

     p1 = a[1]; 

    相当于

     p1 = &a[1][0]; 

    取消引用此指针,您将获得char类型的对象。

    我们来看看以下几行:

     char twodstring[][5]={"2D","Array"}; char *p2; p2=twodstring; 

    在最后一行中,您只需编写数组的标识符。 这将计算指向第一个数组元素的指针。 但是第一个数组元素没有char类型 – 它是一个类型为char [5]的数组本身。

    如果您希望此分配起作用,则必须使用正确的类型声明p2 ,如下所示:

     char twodstring[][5]={"2D","Array"}; char (*p2)[5]; p2=twodstring; 

      以上就是c/c++开发分享为什么在分配指向2D数组的指针时需要指定行?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/541695.html

      (0)
      上一篇 2021年1月3日
      下一篇 2021年1月3日

      精彩推荐