发现一个很好的学习视频,叫朱老师物联网大讲堂。
1、指针类型:在定义指针的时候 数据类型 *指针名 这个地方的数据类型,是指指针指向的变量的数据类型。必须匹配!
在定义的时候可以这么定义 int *pint; float *pfloat; char *pchar; double *pdouble;
int *p; 理解方法,首先看到p,这个是变量名,其次,p前面有个*,说明这个变量p是个指针变量,最后,*p前面有个int,说明这个指针变量p所指向的是一个int型的数据。或者可以写成int* p;理解的时候就可以把int*当成一个整体,指一个指向int型的指针。
2、指针和数组
数组名:做右值时,数组名表示数组的首元素首地址,因此可以直接赋值给指针。如果有int a[5]; 则a和&a[0]都表示数组首元素a[0]的首地址,PS:数组首元素的首地址和数组的首地址是不同的。前者是数组元素的地址,后者是数组的首地址。含义不同但是数值上是相同的。
数组的方式一次访问:a[0] a[1] a[2] a[3] a[4]
指针的方式一次访问:*p *(p+1) *(p+2) *(p+3) *(p+4)
3、指针++ --运算
指针本身也是一种变量,因此也可以进行运算。但是因为指针变量本身存的是某个其他变量的地址值,所以该值进行*/%等运算无意义。两个指针变量相加本身也无意义,相减有意义,指针变量+1,-1是有意义的。+1就代表指针所指向的各自向后挪一格,-1代表指针所指向的各自向前挪一格。
*p++可以看作*(p++)等同于 *p;p+=1;
4、函数传参中使用指针
int add(int a,int b)函数传参使用了int函数;实参把自己的值复制一遍传递给形参,自己本身不参与计算。
int add(int *a,int *b)函数实参传的是地址,这样就可以再函数内改变实参变量的值