1. 指针的定义

指针保存的是所指向的对象的地址。

inta=3;int*p=&a;//定义一个指向×××数a的指针p,此处,int代表p是指向一个×××数的指针,*表明//当前定义的是一个指针,p的值为&a,即a的地址

上面的指针也可以这样定义

int*p;p=&a;


2. 指针的指针

同理,我们可以定义一个指向指针的指针, 它保存的是所指向的指针的地址

inta=3;int*p=&a;int**q=&p;//**说明是指向指针的指针


3. 指针内容的读取

上面的程序中,指针p的值是a的地址,我们想通过p来得到a的值,则用*p; 通过q来获取a的值,则用**q。

printf("a'saddressis:%p.\n",&a);printf("p'svalueis:%p.\n",p);//地址的占位符都是%pprintf("p指向的对象的值:%d.\n",*p);printf("p'saddressis:%p.\n",&p);printf("q'svalueis:%p.\n",q);printf("q指向的指针的值:%p.\n",*q);printf("q指向的指针指向的对象的值:%d.\n",**q);

上面代码的输出:

a's address is: 0x7fff5bce5a9c.

p's value is: 0x7fff5bce5a9c.

p 指向的对象的值: 3.

p's address is : 0x7fff5bce5a90.

q's value is: 0x7fff5bce5a90.

q 指向的指针的值: 0x7fff5bce5a9c.

q 指向的指针指向的对象的值: 3.


实际上就是说:

a == *p == **q;

&a == p == *q;

&p = q;


ID:qpa地址:&q &p&a值:&p&a3