作者:雅茹敬俐6999 | 来源:互联网 | 2023-05-18 14:55
下面的程序中,ve先被定义为int类型的指针但是malloc之后,后面ve直接当做数组名来用了,请问为什么可以这样操作?正常不是应该用ve++来遍历动态地址空间吗?
下面的程序中,
ve先被定义为int类型的指针
但是malloc之后,后面ve直接当做数组名来用了,请问为什么可以这样操作?
正常不是应该用ve++来遍历动态地址空间吗?
15 个解决方案
ve[j]==*(ve+j)
两边取地址:
&ve[j]==ve+j
&ve[0]==ve+0==ve 即 数组名ve等于数组首元素的地址
以上就是数组和指针的变换公式
分配的内存是连续的,数组名即是首地址,[]也是取连续内存的地址
其实a[i] 和 i[a]是等价的,你不信?
char a[10] = "hello";
cout << a[2] << endl;
cout << 2[a] << endl;
你猜猜这是为什么?
http://blog.csdn.net/paschen/article/details/47315449
因为
p[i] 这种形式是指针的专利
数组不过是拥有一批同一类型元素的集合
这些元素连续排列,中间无缝隙。
因此用指针可以索引所有数组元素
所以数组也可以用 a[i];
此时数组名其实是当作指针用的
反了。
通常情况下数组可以自动转换为指针,当作指针来用。
[] 数组标记 属于 “语法糖” 他的用于是简化编码的书写。
a[i] 在编译的时候会被编译器 复原成 *(a + 1),他只是一种指针操作简化的写法。
你甚至可以认为C语言中没有数组。
这也是为什么a[i] 与 i[a] 相等的原因。