指针,本身是一个变量,它的值是另一个变量的地址。
指针作为函数的参数,是传值,值被参数复制!
参数作为一个变量,可以被重新赋值,与原来的值(地址)无关。
值是地址,地址是内存中固定的位置,相同地址的存储的内容 改变 会造成 实参存储内容的改变。
下面这个最简单的例子就说明了这个思想:
#include <iostream>
using namespace std;
void changeIt(int* p)
{
*p+=10;
}
int main()
{
int a=10;
cout << a << endl;
changeIt(&a);
cout << a << endl;
}
形参是个独立的变量。玩一下,指针直接分配,程序没有毛病,偏离了交函数一个地址的初衷。
#include <iostream>
using namespace std;
void changeIt(int*p)
{
p = new int;
*p+=10;
}
int main()
{
int a=10;
cout << a << endl;
changeIt(&a);
cout << a << endl;
}
为了表达初衷,规定它不能指向别的,const。
#include <iostream>
using namespace std;
void changeIt(int* const p)
{
//p = new int;
*p+=10;
}
int main()
{
int a=10;
cout << a << endl;
changeIt(&a);
cout << a << endl;
}
我交给你的内容你也不能改变。
const int * const p;
允许指向不同,不允许改变内容 const int * p;
引用,是不允许改变指向的指针& = typename * const,不能改变指向,所以必须初始化,不能进行运算。然后简化使用形式。完美。