数组指针动态分配内存

来源:百度知道 编辑:UC知道 时间:2024/07/01 01:37:47
今天看到使用new来做二维数组的问题,在看了C++primer后,发现这么一句
int (*p)[1024]=new int [4][1024];
我想问一下这句话的意思,还有后续上的一些使用方法(例如p可以怎么用)
各位最好重点解释一下这句,因为我看得那本书上(不是primer)只有
int *p=new int[1024]这类的写法,没见过上面这种语句。。。

希望讲得简单些,初学
能顺便叫我怎么delete吗?在int (*p)[1024]=new int [4][1024];
这样申请空间的情况下。。。。

int (*p)[1024]=new int [4][1024];
p是一个指针,指向类型为int[1024]的一维数组
new开辟了一个类型为int[4][1024]的数组空间,并让p指向它
此时可以用p[x][y]来访问这个数组,
也可以用这样的形式: *(*(p + x) + y)来访问它
----------------------------------------------------
关于数组与指针,请参看:
http://zhidao.baidu.com/question/112048459.html

----------------------------------------------------

int (*p)[1024]=new int [4][1024];
delete []p; //注意不是delete [][]p;

int (*p)[1024]是声明了一个数组指针p,它指向一个长度为1024的int数组,注意是整个数组.你平时看见的int *p=new int[1024];这个p是个int指针,它指向的是数组的元素,而不是整个数组.

new int[4][1024]你可以理解成生成了一个长度为4的数组,每个数组元素是一个长度为1024的int子数组.

在谭浩强的C上有个叫“指向数组的指针”的说法。
int a[ 5 ][ 6 ];
int ( *p )[ 6 ];
p = a;

则有:*( *( p + i ) + j ) = a[ i ][ j ]。
也就是说能用a的地方就全部能用p代替,比如p[ i ][ j ]。