对于刚刚接触指针的来说,有一个误区,
“数组和指针是相同的”
1、指针和数组定义
int *x;
int y[7];
extern int *y;(会报错)
很直接的说明了编译器不承认指针 = 数组。
int i = 1;
extern int i;
(extern 用来告诉编译器该对象已经被定义类型和名字,本文件可以使用)
2、数组和指针如何访问
首先我们应该分清楚“地址”“地址内容”,可以这么理解,地址相当于寝室号,地址内容相当于寝室里面的实物(床、柜子等等)。我们寻找一个实物需要根据对应地址来查找。
因此要注意不可以在指针不清楚指向地址的情况下给指针赋值。
初始化指针:在定义指针的时候告诉指针地址。或者直接把地址赋值给指针。
然后我们在对指针操作过程中,需要注意:p是一个地址(门牌号),*是读一个地址的数(取实物),这两个结合起来就得到 *p(数)(实物)。数组这个变量在定义的时候,编译器已经为其分配了地址和下标。所以我们可以直接通过数组名和下标(也可以叫偏移量)来读取数据。
数组和指针都可以通过对首地址的数据读取然后对其进行偏移来确定其他值。所以我们可以按照数组的方式来访问指针,按照指针的偏移来访问数组但是相比于指针,数组的优点就是可以根据下标直接读取后面数据,不用偏移,但是缺点也显而易见,从一开始就分配好的内存,相比于指针,浪费了很多空间,而且对数据大小变通的灵活性也低。