关闭

动态分配二元数组

693人阅读 评论(0) 收藏 举报

以前,碰到二元数组和指针有点混,现在做下总结:

int a[][2]={3,2,3,4,5,6};
int** ap;

ap=(int**)a;

编译器能通过;

ap也确实和a的值是一样的,也就是说指向的地址是同一个。

主要问题在于

地址如0X0012ff5c这里面存的值是3(数组首元素);

但是在二元数组指针这个3代表的还是一个地址(操作系统保护的地址);

int   **A;
A=new   int*   [N];
for(int   i=0;i <N;i++)
      A[i]=new   int   [N];
A[0][0]=122334; 
这种方法可能是唯一简单的动态分配二元数组的方法了;

这里注意的是浪费了一个一维指针数组;但是没办法,因为二元数组其实本质就是一元数组来存的,而指针如果要一致的话应该也是定义成一维指针,但是这个时候编译器确通过不了

换句话说是编译器的设计者,当时就没想过动态分配二元数组问题,把这个问题留给程序员来做。

int a[][2]={3,2,3,4,5,6};
int* ap;
ap=(int*)a;
std::cout<<a[1][1];(编译器能够解释这种现象)
std::cout<<ap[1][1];(编译器简单认为这种语法是错的)

如果谁要更好的方法告诉我啊!!!

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:18915次
    • 积分:294
    • 等级:
    • 排名:千里之外
    • 原创:11篇
    • 转载:0篇
    • 译文:0篇
    • 评论:36条
    文章分类
    文章存档
    最新评论