今天不是做题系列,是知识系列啦。
说到指针,我们初学这一定会气的牙痒痒把,笔者也是,这么我好久而不得呀,今天来让我们聊聊指针。
其一
首先,我们明确的知道,假如我们开一个变量,那么我们的c++程序会给他分配内存,并且在此内存上来存储数值。我们使用取地址符&来验证地址
请看代码
int a=10;
cout<<"a="<<a<<" "<<"a的地址为"<<&a<<endl;
所以我们每开一个一个变量并为它赋予初始值,那么系统便会为我们在内存里开辟一个空间来存储我们赋予的数值。
由此推广,指针也不例外。我们开辟一个指针变量,系统也会为他在内存中开辟一个空间,只是与基本数据类型不同的是指针变量存储的不是具体的数值例如整数、浮点数之类,而是一个变量的地址。
我们来验证一下:
int* p;
cout<<"我们开的指针变量的地址为"<<&p<<endl;
p=&a;
cout<<"p的存储的地址为"<<p<<" "<<"a的地址为"<<&a<<endl;
cout<<"我们开的指针变量的地址为"<<&p<<endl;
运行结果:
大家看到了吗,我们开的指针变量本身也有地址,只不过他的地址存储的值也是地址,也就是说指针变量存的就是地址。我们打印指针变量会出现指针变量的值也就是它存储的地址,这就跟我们打印a会出现a存储的值10一样,而打印指针变量的地址则会出现存储指针变量的地址,这二者并不冲突,大家也看到了在内存中开辟的存储指针变量的地址跟指针变量存储的地址不一样。
举个例子吧,好比是你爸爸有你的手机号码,而你有你女朋友的手机号码 。
其二
我们使用*来访问指针变量指向的地址所存储的值。这就是我们所说的操作内存,我们直接在地址上进行值的修改。
看代码
cout<<"我们来访问我们的指针变量所存储的地址的存储的值为"<<*p<<endl;
*p=89300;
cout<<"修改a的值为"<<*p<<endl;
cout<<"修改后的a的值"<<a<<endl;
大家看到了吧,我们使用*p直接就可以访问指针变量指向的地址的存储的值。我们修改这块地址存储的之后,这个变量a也就跟着修改了值。
这就是指针的妙用。
简单来说就是,指针变量记录着地址,指针变量就是一个地址,我们使用*来访问地址的值并且修改那么原变量的值也会修改。
大声喊出我是谁(作者狂喜中),接下来会更新一些数据结构之类的东西,(当然是使用c++实现或者c语言,如果时间允许的话)。主营业务Java算法,大家有啥Java算法竞赛类的疑问欢迎私信。