为什么a+1为a[1]的地址

iYiming 发布于 2012/11/23 13:31
阅读 1K+
收藏 0

为什么C语言中a+1为a[1]的地址,a不为地址吗,地址能进行加运算??请大牛们赐教

加载中
0
梁小刚
梁小刚

首先你要理解数组的定义:

在C中任何的类型都可以以数组的形式存在;

数组定义的语法: type name[dim];

在C中数组的位置从0开始.数组中的元素占有连续的内存,也就是说在内存中的地址是连续的.C中将数组的名字当做指向数组中第一个元素的指针.这个对理解数组的指针运算是很重要的:

如上面的定义中:  *name 和 name[0] 是等价的. *(name+1) 和 name[1] 是等价的.

至于你说为什么指针可以+1,那是因为指针指向的是地址,地址是可以偏移的,指针+1的意思就是在指针的当前位置向后偏移sizof(type) 个字节.由于数组在内存中地址是连续的,所以数组的名字+1或者+N都有了意义(但不能超过数组的长度).

我只能这么解释了,要给好评哦.亲..

 

逍遥书生
逍遥书生
就是这个意思,貌似在C里面,数组名就是指向数组第一个元素的指针,绝大部分情况下两者都可以互相替换。 另外多维数组的情况也可以验证一下。
0
leo108
leo108
地址为什么不能进行加运算呢
0
Jeky
Jeky
地址就是门牌号 a+1就是这条街的下一号
0
iYiming
iYiming

引用来自“JekyCui”的答案

地址就是门牌号 a+1就是这条街的下一号
怎么理解??
0
jingweiyoung
jingweiyoung
额,这个得好好补一下基础了...
0
xoHome
xoHome
这个硬件支持的吧  看下汇编就知道了  用 这个来实现数组
0
南湖船老大
南湖船老大

地址为什么不能进行加运算呢..

这个都不能理解就没办法了,基本的抽象思维啊

0
OscerSong
OscerSong
这个,应该是编译器的缘故!如果不是这样,你如何访问数组元素呢?
0
Honghe
Honghe

a + 1 不能以平常的算术加法理解,
应理解为指针偏移一个sizeof(type)字节,
即指针指向下数组中下一个元素的地址,
偏移的大小随数组中存储的变量类型不同而不同,
要从内存的思维理解,你可以随时打印出其内存地址观察下。

指针不能进行加减运算,可以这样理解,
虽然指针的值打印出来也是整数,
但指针也是一种数据类型,与整型不一样,
C语言又是强类型语言,所以不能混在一起运算,
什么是强类型语言,自己GOOGLE下


0
徐小达
徐小达

 楼上的回答要么简单了 要么太多了

1 首先解释地址是啥

  地址是内存单元的编号,是一个正整数,32位机用32位编号,64位机用64位编号

2 地址也有值,可以存在内存单元中,就是说可以作为变量,所以地址可以加


具体怎么加,怎么通过地址找到内存单元,楼上已有解释

返回顶部
顶部