1、指针:每个变量都有自己的地址,地址也是数据,就用地址类型的变量来装,地址类型就叫指针类型,即指针类型定义的变量就是专门用来装地址的。
2、基本数据类型指针:基本数据类型变量的地址,用对应的基本数据类型指针变量来装。
3、声明指针变量:
short *pc;
char *ps;
注意:1、short*、char*叫指针类型,pc、ps叫指针变量。
2、*表示 pc、ps是指针变量、类型int a[10]的[],在定义变量时是指示作用。
3、空格放在哪儿都行,short *pc,short * pc,short* pc。
4、没有初始化的情况下,数据就是未知的。
4、定义(初始化)指针变量:
int a=12; int *pa=&a;
float b=12.4f; float *pa=&b;
注意:
1、各种类型变量的地址的类型不同,a b变量的地址类型就是变量对应的类型,所以装地址的指针变量的类型,是相应的类型。
2、指针的赋值操作又叫指向,即pa指向变量a的地址。
3、要指向合法的地址空间,非法的空间会异常中断。
4、类型模型:
5、NULL:
double* pd=NULL;//NULL就是0,用来初始化指针。
int as=0;//意义相同。
6、指针的赋值(重新指向)
double d=4.5;
pd=&d;
注意点:
1、指针变量也是变量,可以装别的地址,但是要是同类型的。
2、重新赋值也叫重新指向。
对于一块空间 int a=12,a是这块空间的名字,同名名字可以操作这块空间,&a是空间的地址,通过地址也能操作该空间。
计算规则: *+空间的地址就是该空间名字。(*0x10==a)
*+变量的地址就是该变量本身。(*&a==a)
即*&a==a;
读:printf *&a=12 , 则a输出12;
写:*&a=34,则a=12 被覆盖成了32。
取地址:&*&a==&a 得到该空间的地址。
7、指针的操作:*
可以通过变量来记录地址值。
int a=12;
int* p=&a; //p==&a。
可以直接将*&a==a变为*p==a。
即*p与a的用法完全一样。
读:printf *p,输出12;
写: *p=34,原12被覆盖了,a也是34了。
取地址:&*p==&a 取得该空间的地址。