13
回答
为什么a+1为a[1]的地址
滴滴云服务器,限时包月0.9元,为开发者而生>>>   

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

举报
iYiming
发帖于5年前 13回/1K+阅
共有13个答案 最后回答: 5年前

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

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

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

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

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

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

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

 

--- 共有 1 条评论 ---
逍遥书生就是这个意思,貌似在C里面,数组名就是指向数组第一个元素的指针,绝大部分情况下两者都可以互相替换。 另外多维数组的情况也可以验证一下。 5年前 回复

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

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


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

1 首先解释地址是啥

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

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


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

顶部