【C语言】取值符&和间接值*辨析
计算机程序在存储数据时必须跟踪三种基本属性: 数据是什么 类型 信息在存储器中的 地址 存储的 值 是多少 众所周知,对于常规变量a, &a 是存储地址,a是值。对于指针变量p,p是存储地址, *p 则是值。下面通过一个例子来辨析 取值符& 和 间接值* (indirect value) #include <iostream> using namespace std; ///* & 辨析 int main() { int a; a=10; cout<<&a<<endl; int & b=a;//这里的b是一个reference,初始化时必须赋值。 cout<<&b<<":"<<b<<endl; int* c=&a;//同类型之间才能赋值,&a是(int*)类型 cout<<c<<":"<<*c<<endl; return 0; } /*output 0x28ff04 0x28ff04:10 0x28ff04:10 */ /*a和b区别: (gdb) p a $2 = 10 (gdb) p &b $3 = (int *) 0x400970 (gdb) p b $4 = (int &) @0x7fffffffe55c: 10 */ 可以看出,b不是真正意义上的int类型,但是可以当作int用。&b就是(int*) 所以我们要想在参数传递中修改实参的值,就要通过[1]中 Exchg2