谁能帮我详解一下c语言中数组下标是如何转化成指针的?比如我定义一个数组
int a[5] ={1,2,3,4,5};
为什么 a[2] == * (a+2) ;
求详解
嗯,大神,我刚接触计算机,也刚接触c语言,有很多不太明白的地方,您可以帮我解释下数组
a[b]== * (a+b)吗?我就是看不懂他们是怎么得来的?
c语言的语法规则就是这样定义的,数组变量a本身就代表指向数组第0个元素的指针,数组元素的存储排列方式也是规定按行序排列的,这个在书上是有清晰的说明的,语法规则就是如此,没有原因。
追问嗯,a代表的是数组第一个元素指针吧?
您那说数组指向第0个元素指针是打错了吧?
追答我说的第0个是指c语言的数组下标是从0开始的,我习惯于认为首个是第0个。
为什么要从0开始,还不是对编译器来说计算更方便一点。
追问嗯,那a+2为什么就可以得到a[2]地址呐
追答编译器对一维数组下标运算a[b]的解释就是*(a+b),cpu正好就有这种寻址方式,而数组下班则是数学概念。
数组下标是数学概念,cpu没有数组的概念。
追问嗯,现在对cpu还不了解,希望以后可以慢慢懂,您是怎么知道cpu工作原理的啊?有相关教材吗?
其他的都能看懂,就是(a+2)即a[2]的地址,这里需要详解一下,不懂
追答按a的类型,比如int型,就是在a的基础上加上2*4(vc中),即为a+2
追问大神,我刚学到c语言指针,您能讲的通俗易懂点吗?我看不懂啊,“按a的类型,比如int型,就是在a的基础上加上2*4,即为a+2”,您说的在a的基础上加上2*4是什么意思呢?请问
追答比如a即a[0]的首地址是1000,在vc中,int型是4字节,所以a+2是1000+2*4,即a+2从1008字节开始
追问为什么a+2就可以得到a[2]的地址了呢?
追答在编译时,对数组元素a[i]就是按我上面说的进行,即*(a+i)
这个应该可以推出来的吧?
追答ISO C N1570
6.5.2.1p2
6.5.6p8
When an expression that has integer type is added to or subtracted from a pointer, the