// Type your code here, or load an example.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void testPointer(int *add)
{
cout<<"========1=========="<<endl;
cout<<"the value the pointer points:"<<*add<<endl;
cout<<"it's value: "<<hex<<add<<endl;
cout<<"it's addr:"<<hex<<&add<<endl;
add = nullptr;
cout<<"=========2========="<<endl;
cout<<"it's value: "<<hex<<add<<endl;
cout<<"it's addr:"<<hex<<&add<<endl;
}
int main ()
{
int a = 8;
int *b = &a;
cout<<"it's value: "<<hex<<b<<endl;
cout<<"it's addr:"<<hex<<&b<<endl;
testPointer(b);
cout<<"=========3========="<<endl;
cout<<"it's value: "<<hex<<b<<endl;
cout<<"it's addr:"<<hex<<&b<<endl;
return 0;
}
运行结果:
it's value: 0x7ffd06f86c2c
it's addr:0x7ffd06f86c20
========1==========
the value the pointer points:8
it's value: 0x7ffd06f86c2c
it's addr:0x7ffd06f86c08
=========2=========
it's value: 0
it's addr:0x7ffd06f86c08
=========3=========
it's value: 0x7ffd06f86c2c
it's addr:0x7ffd06f86c20
地址本身也是值;传地址其实是传值的一种。
有一个小人儿A,它的手指向了一个圆圈圈起来的地,地里有8个萝卜;
通过函数testPointer传递时发生了什么怎么理解?
会再出来一个小人儿B,它的手也指向了这个圆圈所在的地。
如果,在这个testPointer函数里将add赋值为nullptr怎么理解?
相当于让小人儿B把手给放下,谁也别指了。
那此时对小人儿A有影响吗?没有。
如果,在这个testPointer函数里,通过将*add赋值为9,此时怎么理解?
相当于让小人儿B去那块地里,把地里的萝卜变成9个;
那么小人儿A指的这个地有几个萝卜?9个,因为被B改变了。A和B都依然指向这块地。
如果,在这个testPointer函数里,free(add)会发生什么?
相当于让小人儿B去把那块原型的地挖了,萝卜可能还在那块地,可能被翻的稀烂,也可能被别人种辣椒了。
而此时小人儿A呢?它还指向那块地,只是那块地被挖了,已经是一块野地了,此时不管是小人儿A再去访问那块地、还是去挖那块地,都属于非法行为。