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;
}
结果图:
不妨我们再来总结下那个表吧,注意颜色相同则输出的结果相同:
关于多重指针的暂时就写到这里吧!文中难免有些表达不当之处,忘广大网友批评指正!转文请注明出处!祝大家编码顺利,身体健康!