据我了解:
int B[2][3];
int* p=B;
不起作用,因为B不是指向int的指针,而是指向3个int数组的指针。但这与B仍指向数组中的第一个元素int的事实并不矛盾。那么,为什么* p或* B不包含B [0] [0]的值?
什么东西可以成为“整数数组”的指针?指针只能指向内存中的单个地址,而不能指向所有3个地址。因此,B应该始终指向第一个元素所在的地址,而不管存储块有多长。
请解释为什么我的推理不起作用,因为我很难完全理解它。谢谢。
B
是的数组int
。它不是指针,因此不指向任何内容。但是,在大多数情况下,它在代码中的位置B
会自动转换为指向数组第一个元素的指针。该元素不是int
,而是3 int
s的数组。
什么东西可以成为“整数数组”的指针?指针只能指向内存中的单个地址,而不能指向所有3个地址。
您不妨问一下如何拥有一个指向的指针int
。在我所知道的每个C系统中,int
s都比一个字节宽,但是字节可以单独寻址。那么,int
当其中的各个字节具有单独的地址时,您如何指向?当然,对于的答案与对于int
数组的答案相同:整个对象的地址是其第一个字节的地址。
因此,B应该始终指向第一个元素所在的地址,而不管存储块有多长。
确实如此,但是根据指针所指向的数据类型来解释指针。指向不同数据类型的指针甚至可以用不同的方式表示。鉴于您的声明...
int B[2][3];
...该表达式的*B
计算结果为3 int
s的数组,特别是B[0]
。这B[0][0]
与an的第一个字节int
与整个字节相同没有什么不同int
。特别(*B)[1]
是是的一个完全有效的替代表达式B[0][1]
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句