一、什么是指针
在算计中,数据被储存在内存里,计算机是如何找到数据的位置呢?答案是通过地址查找,内存里的地址是已经约定好的,以字节为单位,如果我们想要访问内存的地址,那就用到指针变量来储存和访问内存里的地址。可以说指针就是地址,指针变量就是储存地址的变量。
二、指针变量的创建和表示方法
一般来说,指针变量通常是“变量类型+变量名”。比如
int i=0;
int* a=&i;
表示创建了一个指针变量a,指向了变量“i”的地址,那么就可以使用指针变量“i”来间接使用变量a,比如
*i=1;
表示将“i”解引用,并同时将i指向的变量的值修改为“1”,因此,a的值便变成了“1”。同时,指针也可以用来修改被“const”关键字修饰的数据。
三、创建指针的注意事项
指针在创建时需要指向一个明确的地址,否则就是创建了一个野指针,野指针是很危险的,因为你也不知道它指向了谁,在使用的时候容易造成不必要的意外。
四、数组名和函数名
数组名和函数名就代表了数组和函数的首地址,但是在数组中,“&数组名”,sizeof(数组名),在这里的数组名代表着整个数组,例如int arr[10]“&arr”指向了整个数组的地址,类型是int (*)[10],sizeof(arr)的返回值是整个数组所占用的字节数。
五、指针访问的地址大小
众所周知,地址的大小取决于电脑硬件,在32位环境下的地址是4个字节,64位环境下是8个字节,下面举一个例子
int a=10;
int*p=&a;
char*pp=(char*)p;
*pp=1;
这里我们访问p的时候,可以访问四个字节,但是pp只能访问1个字节,所以*pp=1并不能将最初的a值变为1,他只是将a所占用的四个字节其中的一个字节修改了,总结下来就是“可访问的内存大小取决于指针的类型”,有时候可以利用这一特性去修改特定位置的数据。
六、函数和数组传址
在有些时候我们需要将数组或者函数作为参数传入另一个函数,从本质上来说,传入的是函数或者数组的地址,当传入数组时,数组名代表数组首元素地址,当传入函数时,函数名是函数的地址,同时传入的函数被称为“回调函数”。