小弟是一个软件工程师,做unix c/c++ java的开发,每次碰到问题都跑到CU
里问人,呵呵,昨天在碰到一个指针数组的
问题的时候,由于好久没用,感觉有些陌生了,所以今天归纳总结了一下,希望
以后的朋友可以少走些弯路,也不知道对大家有没有用处:)
一 :关于指针和堆的内存分配
(1) 指针数组 : 一个数组里放的都是指针,我们把他叫做指针数组:)
int * a[10]; 由于它是一个数组,他是不能从堆空间里申请空间的。
只能做个循环,每个元素去申请空间,或者每个元素去指向另外的地址空间。
( 2 ) 数组指针 : 一个指向一唯或者多唯数组的指针;
int * b=new int[10]; 指向一唯数组的指针b ;
a 指向了一个栈空间中10个并排放置的 int 型元素的首地址
int (*b2)[10]=new int[10][10]; 注意,这里的b2指向了一个二唯int型数组
的首地址.
注意,这里的b2的类型是int (*) ,这样表示一个指向二唯数组的指针。再注意,
如果这样在堆空间里已经申请了内存,在释放内存的时候要保证每个空间都要释
放。
int (**b3)[2]=new (int(*)[2])[2]; b3表示一个指向(指向二唯数组的指针)
的指针,我们在给他申请空间的时候一定要注意它的类型:它是int (*)型的指
针,那申请空间的时候的类型为int(*)[元素个数],由于它后边还带个二唯数组
每元的个数后缀,所以加上这个后缀就OK了。
int (**b4)[2];表示每一个元素都指向(指向二唯数组的指针)的数组。
由于它是数组,所以要是在堆里申请内存,就必须为每一个元素单独申请。