数组地址和数组名的故事

废话少说直接上题:

eg:    int arry[3][5]={0};

问:arry的数据类型是啥?

答:判断数据类型最牛(jian)掰(dan)的方法就是把变量名遮住啦;所以arry的本质数据类型是int [3][5];但是arry也可以代表为类型int (*)[5],是一个二级指针,且第二个维度是5;

问:int (*ptr) [3][5]  = & arry;

答:成立; ptr的数据类型是int [3][5]类型的指针;ptr解引用得到arry

问:int (*p)[5] = arry;

答:成立;arry 的数据类型可以是一个二级指针,其中第二个维度是5,即int [5]类型的指针;

问:int  *pp =*arry;

答:成立;arry是一个二级指针,解引用得到一个一级指针即一维指针;


几维数组名代表的就是几维指针;

数组名本质:(参考:http://tech.163.com/05/0823/11/1RR94CAS00091589.html)

(1)数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组;

(2)数组名的外延在于其可以转换为指向其指代实体的指针,而且是一个指针常量;

(3)指向数组的指针则是另外一种变量类型(在WIN32平台下,长度为4),仅仅意味着数组的存放地址!

对(3)的理解:数据名作为函数形参时,其全面沦落为一个普通指针!它的贵族身份被剥夺,成了一个地地道道的只拥有4个字节的平民。

你可能感兴趣的:(数组地址和数组名的故事)