问题
有如下代码:
int data1, data2;
int array[5] = {1,2,3,4,5};
int *ptr = array;
data1 = array[2];
data2 = *(ptr + 2);
请描述data1和data2的赋值流程。
在执行data1和data2赋值以前的内存布局如下:
关于指针
指针的访问流程
- 先从指针变量中获得对象的地址
- 从这个对象的地址中取得数据
- 如果有偏移量,就在对象的地址上偏移指定类型的长度后,取数据。
关于数组
数组的访问流程
- 直接在数组所在的地址访问数据
- 如果有偏移,就直接在地址上偏移一定长度后,取数据先从指针变量中获得对象的地址
数组和指针的区别