初学C语言指针引用数组元素,很简单的原理没搞清,谢谢回答。
书里面讲数组,假设数组为int类型,其数组名为a,从这个数组元素到下一个元素,如a[0]到a[1],可以用(a+1)表示,这里1表示一个整形,即4个字节,所以a[1]的地...
书里面讲数组,假设数组为int类型,其数组名为a,从这个数组元素到下一个元素,如a[0]到a[1],可以用(a+1)表示,这里1表示一个整形,即4个字节,所以a[1]的地址相对于a[0]的地址要加4(比如a[0]地址为0012ff40,a[1]地址为0012ff44,地址用十六进制表示的),我想问难道一个字节就等于一个十六进制吗,4个字节就是十六进制加4?而不是4个字节等于32个bit,就是32位二进制位,就是xxxxx位十六进制?
展开
3个回答
展开全部
首先:
4个字节 = 32 bit = 32 位二进制位, 你说的很对。
还有, 在开始解释这个问题前, 我想先做几个规定, 方便解释:
我规定:
a 是数组的首地址, a = 0x00 , a 的地址是 0
那么, 我要开始解释你的问题了。
a + 1 中的 1 并不是 4 个字节的意思, 按道理 a + 1 应该等于 0x01 , 因为 a 的是数组的首地址, 它的值是 0. 但是编译器知道 a 是int类型的数组的首地址, 所以他会自作主张的做出如下的转换: (a+1) -> (a+1*4) , 其中的 4 就是 int 类型的大小, 如果 int 类型是 8 个字节的话, 这个转换就是 (a+1) -> (a + 1*8).
解释完了, 如果还有疑问, 欢迎追问
4个字节 = 32 bit = 32 位二进制位, 你说的很对。
还有, 在开始解释这个问题前, 我想先做几个规定, 方便解释:
我规定:
a 是数组的首地址, a = 0x00 , a 的地址是 0
那么, 我要开始解释你的问题了。
a + 1 中的 1 并不是 4 个字节的意思, 按道理 a + 1 应该等于 0x01 , 因为 a 的是数组的首地址, 它的值是 0. 但是编译器知道 a 是int类型的数组的首地址, 所以他会自作主张的做出如下的转换: (a+1) -> (a+1*4) , 其中的 4 就是 int 类型的大小, 如果 int 类型是 8 个字节的话, 这个转换就是 (a+1) -> (a + 1*8).
解释完了, 如果还有疑问, 欢迎追问
展开全部
4个字节等于32个bit 是对的
这里的地址 +4
不是你理解的16进制地址+4
因为 a[0]到a[1]
a+1 就是+32个bit
这里的地址 +4
不是你理解的16进制地址+4
因为 a[0]到a[1]
a+1 就是+32个bit
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
考虑的有点多,a是首地址 a[0]就是第一个元素了,a+1就是a[1]了。确实如果数组的类型是int,那么这里的a+1并不是加的1而是4。不过这都是底层的东西,编译器已经帮你解决这个问题了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询