关键词不能为空

当前您在: 主页 > 英语 >

二维数组定义以及动态分配空间(精)

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-08 03:13
tags:

-

2021年2月8日发(作者:eider)


二维数组定义以及动态分配空间



(



)



下面三种定义形式怎么理解?怎么动态分配空间?




(1)



int


**Ptr;



(2)



int


*Ptr[


5


];


我更喜欢写成



int*


Prt[5];



(3)



int


(


*Ptr


)[


5


];


此文引自网上,出处不详,但是觉得非常好。略改了一点。


< /p>


多维数组一向很难,一般都采用一维数组,但是一旦要用到还真是头疼。

< br>



闲话少说,这里我就以三个二维数组的比较来展开讨论:





(1)



int


**Ptr;




(2)



int


*Ptr[


5


];


我更喜欢写成



int*


Prt[5];




(3)



int


(


*Ptr


)[


5


];




以上三例都是整数的二维数组,都可以用形如



Ptr[


1


][


1


]





方式访问其内容;但它们的差别却是很大的。下面我从四个方 面对它们




进行讨论:





一、内容:





它们本身都是指针,它们的最终内容都是整数。注意我这里说




的是最终内容,而不是中间内容,比如你写



Ptr[


0


]


,对于三者来说,




其内容都是一个整数指针,即



int


*



Ptr[


1


][


1


]


这样的形式才




是其最终内容。





二、意义:





(1)



int


**Ptr


表示指向



一群



指向整数的指针的指针。





(2)



int


*Ptr[


5


]


表示指向



5


个指向整数的指针的指针


,


或者说


P tr



5


个指向



一群



整数


的 指针,


Ptr


是这


5

< br>个指针构成的数组的地址





(3)



int


(


*Ptr


)[


5


]


表示指向


一群



指向



5


个整数数组的指针的指针。





三、所占空间:





(1)



int


**Ptr




(3)



int


(


*Ptr


)[


5


]


一样,在

32


位平台里,


都是


4

< p>
字节,


即一个指针。







(2)



int


*Ptr[


5


]


不同,它是



5


个指针,它占


5


*


4


=


20


个字节的内存空间。





四、用法:





(1)



int


**Ptr




因为是指针的指针,需要两次内存分配才能使用其最终内容。首




先,


Ptr


=


(


int


**


)new


int


*[


5


]


;这样分配好了以后,它和


(2)





意义相同了;然后要分别对



5


个指针进行内存分配,例如:





Ptr[


0


]


=


new


int[


20


];




它表示为第



0


个指针分配



20


个整数,分配好以后,



Ptr[


0


]


为指






20


个整数的数组。这时可以使用下标用法



Ptr[


0


][


0


]





Ptr[


0


][


19


]


了。





如果没有第一次内存分配,该



Ptr


是个





指针,是不能使用




的,如果没有第二次内存分配,则



Ptr[


0


]

< br>等也是个




指针,也




是不能用的。当然, 用它指向某个已经定义的地址则是允许的,那是另外




的用法(类似于



借鸡生蛋


的做法),这里不作讨论(下同)。



例子:


-


-


-


-


-


-


-


-



本文更新与2021-02-08 03:13,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/611639.html

二维数组定义以及动态分配空间(精)的相关文章