从指针到指向指针的指针------个人理解!

c/c++是工科学生必不可少的课程。本人是电子通信行业的,客观上说没有计算机、软工专业的学生更加专业!但是我们也得会编程,不然的话毕业以后没有饭碗啊!

下面写一下个人对指针的理解。首先,我们要知道定义一个变量就会在内存中开辟一个空间,这个空间就是存储这个数的。

例如:

int value=2131;

计算机会给变量 value 开辟4个字节的内存用来存储2131这个整型数。那么我们如何得知这个内存究竟在哪个位置呢?打印出来,其实很简单,一句话既可以搞定:

cout<<"value 的地址是:"<<&value<<'\n';

我们定义一个整数型的指针:

int* p=new int;//定义指针p

p=&value;//这句话就是指针p指向了value的地址

这样一来下边两句话所输出的就是一模一样了:

cout<<"value 的地址是  :"<<&value<<'\n';

cout<<"value 的地址是p:"<<p<<'\n';

其实还有很重要的一件事没有说,那就是*p,其实我们所设置的value的值就是*p

	cout<<"value : "<<value<<endl;
	cout<<" *p   : "<<*p<<endl;

来一段整代码看看效果:

#include <iostream>
using namespace std;
int main()
{
	int value=2131;
	int* p=new int;
	//int** pp=new int;
	//int*** ppp=new int;
	p=&value;//使指针p指向value的地址
	cout<<"value : "<<value<<endl;
	cout<<" *p   : "<<*p<<endl;
	cout<<"&value: "<<&value<<endl;
	cout<<"  p   : "<<p<<endl;
	return 0;
}

结果为:

画出内存分配:

&value代表value所在的地址,它等同于p;依次类推&p那就是代表p的地址了!我们在刚才的基础上添加一句话:

cout<<"   &p  :  "<<&p<<endl;

其结果为:  &p  : 0018ff1c;

于是上表就变成了:

以此类推,我们可以推出“指向指针的指针”以及“指向指针指针的指针”等等等~~~

不妨先把上图扩展一下:

内容代表的是数值,这里无法表示的数用括号括起来。只要你愿意,完全可以这么写:int****...* pppp...p;(虽说这么写好像没什么卵用);不妨试试&ppp、ppp、*ppp、**ppp、***ppp分别是什么吧!具上述的个人推论,我有一系列大胆的想法:

1:&ppp就是ppp的地址。

2:ppp=&pp;

3:*ppp=pp=&p;

4:**ppp=*pp=p=&value;

5:***ppp=**pp=*p=value;

让我们撸出代码检测一下吧!

#include <iostream>
using namespace std;

int main()
{
	int value=2131;
	int* p=&value;
	int** pp=&p;
	int*** ppp=&pp;

	cout<<"&ppp  : "<<&ppp<<endl;//第一个大胆的想法
    cout<<"-----分-割-线-----"<<endl;
	cout<<"ppp   : "<<ppp<<endl;//第二个大胆的想法
	cout<<"&pp   : "<<&pp<<endl;
    cout<<"-----分-割-线-----"<<endl;
	cout<<"*ppp  : "<<*ppp<<endl;//第三个大胆的想法
	cout<<" pp   : "<<pp<<endl;
	cout<<" &p   : "<<&p<<endl;
    cout<<"-----分-割-线-----"<<endl;
	cout<<"**ppp : "<<**ppp<<endl;//第四个大胆的想法
	cout<<" *pp  : "<<*pp<<endl;
	cout<<"  p   : "<<p<<endl;
	cout<<"&value: "<<&value<<endl;
	cout<<"-----分-割-线-----"<<endl;
	cout<<"***ppp: "<<***ppp<<endl;//第五个大胆的想法
	cout<<" **pp : "<<**pp<<endl;
	cout<<"  *p  : "<<*p<<endl;
	cout<<"value : "<<value<<endl;
	return 0;
}

结果图:

 

不妨我们再来总结下那个表吧,注意颜色相同则输出的结果相同

关于多重指针的暂时就写到这里吧!文中难免有些表达不当之处,忘广大网友批评指正!转文请注明出处!祝大家编码顺利,身体健康!

猜你喜欢

转载自blog.csdn.net/a133760/article/details/84337591