指针初级教学
分类:C++
指针一直是一个困扰初学者的问题,我当初学指针的时候也是一头雾水,但是后来回过头来再看,其实也不是那么复杂。
计算机语言是一套完备的系统,容不得丝毫含糊,所以每一个符号都是有它的特定的用途。
有两个重要的符号:* 和 & 。直接用一个例子来介绍 * 和 & 的用法。
int a = 1;
int* p =
&a;
cout << "p = " << p << endl;
cout << "*p = " << *p << endl;
cout << "&p = " << &p << endl;
cout << endl;
cout << "a = " << a << endl;
cout << "&a = " << &a << endl;
输出结果:![]()


可以看出来 *p 和 a 的值是一样的,p 和 &a 的值是一样的。
这里怎么理解?令初学者困惑的地方在于为什么两个地方的 * 位置不同?
*
- 这是因为 int* 中的 * 的声明一个指针变量 p ,它指向一个 int 型的变量,所以我们更倾向于把它和指向的变量的类型(int)放在一起。
- 而 *p 中的 * 是解引用运算符。是将 p (指针变量)引用 a (整型变量)的关系暂时解除——释放所指向的内存给OS,再说的简单一点就是取它所指向的内存的值。在使用时我们更倾向于将它(运算符)和需要作用的变量(p)放在一起。
虽然怎么 * 的位置怎么放都没有关系,因为编译器在编译时会自动过滤掉空格符合制表符,但是理解清楚 * 之后就很容易根据它的具体用途形成自己的代码书写风格了。
所以两个地方的 * 根本不是一个意思:一个是变量类型;一个是运算符。
&
理解了 * 之后再来看 & 就清楚多了。 & 就是取地址运算符,就是取出某个变量的内存地址。一般用于将指针需要指向的变量的地址取出,赋给该指针变量。
如果有收获,可以请我喝杯咖啡!