1 // 指针运算符实验.cpp: 2 // 3 4 #include "stdafx.h" 5 #include <iostream> 6 using namespace std; 7 8 9 int main() 10 { 11 int x, *p, *q = &x; 12 cin >> x; 13 p = &x; 14 15 cout << endl; 16 17 cout << " p = " << p << endl; 18 cout << " *p = " << *p << endl; 19 cout << " *&x = " << *&x << endl; 20 cout << " &*p = " << &*p << endl; 21 cout << " *&p = " << *&p << endl; 22 23 cout << endl; 24 25 cout << " q = " << q << endl; 26 27 return 0; 28 }
执行结果为
指针运算中,最令人费解的一句语法就是
int *q = &x;
因为通常我们(菜鸟)定义某个变量,或是给某个变量赋值/初始化,其余运算符都在 = 运算符右边(表达式);
然而这句中,*运算符(contents of operator/dereferencing operator)却位于 = 左边,给人的一种,*也是指针名的一部分,的错觉;
然而事实上,*是一个运算符(话说这如何同乘法运算相区别?)
所谓的*,指针运算符/间接访问运算符,我觉得还是英文名更加形象,容易理解:
contents,即内容,访问指向的变量地址,将变量单元中的内容(value)给取出来
*p 和 p = &x 两个运算实际上,获取了变量三要素中的两个(变量值、变量的储存单元),唯一不同的就只有变量名
故,*p(对 &x 执行 * 运算)又称变量 x 的别名
Youtube真是基础课学习神器啊
Introduction to Pointers in C++, Tutorial on Pointers, C++ Pointers
=