为什么解除指向一个整数数组(在2d数组中)的指针返回(或衰减到)指
我已经阅读了许多指针和二维数组关系的帖子,但我似乎无法理解概念.
假设有一个2d数组int [3] [2]和数组int b [2]. 现在a返回一个指向大小为3的整数数组的指针.它的类型为int(*)[2]. 正如我对这个概念的理解所做的那样(* a)会给我数组本身,这会衰减到指向1d数组的第一个元素并且类型为(int *)的指针.现在大胆的部分是怀疑. 作为[0],* a,& a [0] [0]表示相同的指针.这里作为[0]是第一个1d数组.那么这是真的,b(在上面声明)和一个[0]代表相同的东西(都是1d数组然后衰减到指向类型(int *)数组中第一个元素的指针? 解决方法
C11:6.3.2.1 p(3):
简单;数组名称可以转换为指向其第一个元素的指针. 由于a是一个数组名称,它衰减到指向其第一个元素的指针,该元素是一维数组.它的类型是int(*)[2].由于(在衰减之后)是指向2 int数组的指针,* a是2个int的数组.由于这是一个数组类型,即* a是第一个1D数组的数组名,它衰减到指向数组对象的第一个元素(a [0] [0])的指针.所以,它的类型是int *.
是b和a [0]都是int *类型(衰变后). 1.阅读Keith Thompson的commat.另请阅读此answer,其中指出:C11标准的草案说数组有另一个例外,即当数组是新_Alignof运算符的操作数时.这是草案中的错误,在最终公布的C11标准中得到纠正; _Alignof只能应用于带括号的类型名称,而不能应用于表达式. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |