- 关于数组首地址问题
定义一个char
型数组char a[3] = {'1', '2', '3'};
。
Q1:a
,a + 1
,&a
,&a+1
有什么区别?
A1:首先a
,我们一般用数组名来表示这个数组的首地址,但其实这是不太准确的。a
代表的实际山是数组首元素的首地址,而real的数组首地址是用&a
来表示的。虽然他们两个的值相同,但意义是不一样的,不一样在哪里呢?下个问题解答。
Q2:那么a
和a+1
有什么区别?&a
和&a+1
有什么区别?a+1
又和&a+1
有什么区别?
A2:第一个问题讲过a
和&a
的区别。那么在对数组地址进行加法时:
对于a
来说,它是越过了1个数组元素所占地址空间,比如a
他是char
型数组,则每个元素占1个字节,所以a+1
是跳跃了1个字节,即a+1
等价于&a[0] + 1*sizeof(a[0]);
(这里,a
和&a[0]
是等价的)。
对于&a
来说,你对他+1,是让他跨越了整个数组的地址空间,到达最后一个数组元素的下一个地址。(无奈啊,谁让他代表的是整个数组地址呢╮(╯▽╰)╭)。所以&a+1
等价于&a + 1 * sizeof(a)
。下面看个实操吧,好理解一些:
数组与指针
最新推荐文章于 2022-12-03 18:10:41 发布
本文详细探讨了数组和指针的关系,包括数组名与指针的区别、数组地址的加法行为、指针定义与解引用操作,以及多维数组、指针数组和数组指针的概念。还介绍了数组作为参数传递时的处理方式,强调了地址值参与运算的单位是元素的存储大小。
摘要由CSDN通过智能技术生成