以前,碰到二元数组和指针有点混,现在做下总结:
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];(编译器简单认为这种语法是错的)
如果谁要更好的方法告诉我啊!!!