动态分配二元数组

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

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];(编译器简单认为这种语法是错的)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值