1)指针变量:存放地址的变量称为指针变量。指针变量是一种特殊的变量,它不同于一般的变量,一般变量存放的是数据本身,而指针变量存放的是数据的地址。
2)&:取地址运算符,如&a是变量a的地址。
3)*:指针运算符(或称“间接访问”运算符),*a代表指针变量a指向的对象。
4)int 是整型数据类型,int i,i是该类型的变量,i是整型变量,&i是i的地址,是指向int变量i的指针。
5)int * 是指向整型数据的指针类型(也是一个类型),int * j,j是指向整型数据(int)的指针变量,是指针变量,&j是j的地址,&j是指向指针变量j的指针。
6)int ** 是指向指针(指向一个整型数据)的指针类型,int ** k,k是指向指向一个整型数据(int *)的指针变量,是指针变量,&k是k的地址,&k是指向指针变量k的指针。
具体例子:
int * j = &i;
int ** k = &j;
有如下表格:
变量名 | 变量值 | 变量地址 |
i | 0x03 | 0x10 |
j | 0x10 | 0x20 |
k | 0x20 | 0x30 |
从此表格可以看出,整型变量i的存储单元存着一个数值0x03,这个存储单元的地址是0x10,而指针变量j的存储单元存着一个数值0x10,这个存储单元的地址是0x20,也就是说,j里面存着的变量值是i的变量地址,而k的存储单元里存着的是j的地址0x20,而k存储单元的地址是0x30,则它们有如下关系:
1)先只看 int * j = &i如下:
j = &i
*j = *(&i) = i
2)加上int ** k = &j后如下:
k=*(&k)=&j
*k=*(&j)=j=&i
*(*k)=*(*(&j))=* j=* (&i)=i
总结:
要记住,指针是地址,而指针变量是存放某个地址的变量,并且可以通过“*”来访问变量值。