关于与new一个指针数组的问题
首先对于今天碰到的这个问题一个是基础不牢靠,第二是还是代码量不够,这个要进行反思了,第三是脑子容易短路-。-;
大家都知道为了在程序堆中分配内存,我们经常使用new(在智能指针没有出现之前)以及delete,
日常生活中我们经常这样做:
我们知道 node* p1 = new node[10];表示一个数组且返回的是首元素的地址
我们可以通过以下方式访问类里面的属性和方法
p->_attribute
p->function()
然后有一次我在一个程序中想定义一个三维数组,这个数组里面存放的是指向某个类的指针
然后我就习惯性的这样写代码
node***ArrayNode = new node**[2];
for (int i = 0; i < 2; ++i) {
ArrayNode[i] = new node*[2];
for (int j = 0; j <2; ++j) {
ArrayNode[i][j] =new node[2];
for (int k = 0; k < 2; ++k) {
ArrayNode[i][j][k] = new node(kp,kp);
}
}
}
结果程序提示contrainNode3[i][j][k] = new node(kp,kp);
错误 不能将node* 赋值给node(真被自己蠢哭了),我当时傻眼了,这个数组里面存储的是指针啊怎么不能赋值。
后面我就降维写一个简单的一维数组
int* test = new int [2]
int* test = new int[2];
for(int i=0;i<2;++i){
test[i] = new int(2);
}
代码还是以上错误,然后,妈耶肯定不能赋值啊,这个new的数组不就是普通的数组int a[10]
一样吗
哎!!!!!惭愧惭愧
如果我们想定义指针数组 我们可以这样做
typedef int* intPtr;
intPtr*ArrayIntPtr= new intPtr[2];
for (int i = 0; i < 2; ++i) {
ArrayIntPtr[i] = new int(2);
}
释放的时候:
for (int j = 0; j < 2; ++j) {
delete ArrayIntPtr[j];
}
delete[]ArrayIntPtr;
真的是基础不牢地动山摇啊。