指针的概念
指针是一个变量类型,所定义的变量用于存放地址
初始化格式为:指针类型+变量名-> 例子:int *p或者int* p都可以定义一个指针
最简单的使用方式:int a = 10; int *p = &a; //其中变量类型要相对应,比如int要对应int*,char要对应char*。
为什么要用到指针变量
第一个用法是:想使用的函数对main函数中的实际参数进行操作时,则需要将实际参数的地址传递给函数,函数的形式参数就要定义成指针变量来接受传递过来的地址;
第二个用法是:想要对指定的地址进行操作,这种情况则需要利用指针变量来接收。
指针、数组和函数的合用
指针与一维数组:其实在用法上一级指针与一维数组是较为相似的,数组名代表着数组的首地址。将一维数组的首地址赋给指针变量,int arr[3]={1,2,3}; int *p = arr; 循环遍历arr[i]或*(p+i)都可以将数组的值打印出来。
指针与二维数组:利用指针来表达二维数组其实不太符合,不过因为数组的地址是连续的,因此可以将二维数组看成一个大的一维数组,利用一级指针也是可以表达出来,不过这样子感觉就少了个维度一样。因此引入了一个数组指针的定义。初始化定义为:int (*p) [4]; 可以对应二维数组arr[][4],将p=arr之后,则可以利用*(*(p+i)+j)来访问二维数组的值。
指针数组:int (*p)[10] 一个指向10个整型数的数组的指针;
数组指针: int *p[10] 一个有10个指针的数组;
函数指针:int (*p)(int , int ) 一个指向函数的指针,该函数返回值为整型数;
指针函数:int* hanshu(int data1,int data2) 一个函数,返回值为指针变量;
结合:int (*p[10])(int , int ) 一个有十个指针的数组,每个指针指向一个函数,返回值为整型数;
int (*(*hanshu)(int , int ))(int) 分为两层,内层是一个返回值为函数指针的函数指针,外层是一个返回值为整型值的函数。
多级指针
二级指针:一级指针是存放变量的地址,此时指针变量存放的内容是变量的地址,而一级指针的地址可由二级指针来接收,就可以通过二级指针间接访问变量的内容;
例子:int a=10; int *p=&a; int **p2=&p;假如a的地址为0x1234,p存放就是0x1234,p的地址为0xFE14,p2的内容为0xFE14,以此类推,p2的地址可由三级指针接收;
此时a=*p=**p2=10
仅作个人学习记录,有错误希望指正