变量的名称、地址和变量的值之间关系密切。
我们可以认为变量有两个属性:名称和值(其他属性暂不讨论);
计算机编译和加载后也认为变量有两个属性:地址和值。地址就是变量在计算机内部的名称。
许多语言中地址都归计算机管,对程序员隐藏。
但是在C当中,可以通过&运算符访问地址,通过*运算符获取地址上的值。
例如:&barn表示变量barn的地址。使用变量名即可获得变量的值。
使用*运算符可以获得地址上的值;
例如:
1 int barn =1;
2 int val;
3 int * pbarn; //声明了一个指向int变量的指针
4 pbarn = &barn; //告诉指针pbarn指向谁;
5 val = *pbarn; //将指针所指的变量的值赋值给val
指针的本质也是变量,叫做指针变量,这个特殊变量的存的值是地址。
简而言之,普通变量把值作为基本量,把地址作为通过&运算符获得的派生量;
而指针变量把地址作为基本量,把值作为通过*运算符获得的派生量;
*运算符也叫做间接运算符;
之所以叫间接运算符,其实上面代码的3-5行实现的效果等效于 val = barn;
所以是间接实现了赋值,于是这个运算符就叫间接运算符。
所以说&、*和指针可以操纵地址和地址上的内容。