运算符&
获得变量的地址,操作数必须为变量
地址的大小是否与int相同取决于编译器
&不能对没有地址的东西取地址
一个指针类型的变量,就是保存地址的变量*
int *p=&i;
变量的值是内存的地址
普通变量的值是实际的值
指针变量的值是具有实际值的变量的地址
作为参数的指针
void f(int *p)
在被调用的时候得到了某个变量的地址
int i=0;f(&i);
在函数里面可以通过这个指针访问外面的这个i
访问地址上的变量:*
* 是一个单目运算符,用来访问指针的值所 表示的地址上的变量
可以做右值也可以做左值
*左值之所以叫左值
因为出现在赋值号左边的不是变量,而是值,是表达式计算的结果:
a[0]=2; *p=3; 是特殊的值,所以叫左值
指针的运算符&*
互相反作用
&*yptr->&(*yptr)->&(y)->得到y的地址,也就是yptr->yptr
*&yptr->*(&yptr)->*(yptr的地址)->得到那个地址上的变量->yptr
指针应用场景:1.交换两个变量的值
2.函数返回多个值,某些值就只能通过指针返回
3.传入的参数实际上是需要保存带回的结果的变量
4.函数返回运算状态,结果通过指针返回(常见的套路是让函数返回特殊的不属于有效范围内的值 来表示出错:-1或0
但是当任何数值都是有效的可能结果时,就得分开返回了