2-访问变量内存单元:变量名、引用和指针

引用与指针

• 访问变量内存单元

– 变量名
– 引用
– 指针

C++ 语法:定义引用变量

引用类型 &引用变量名 = 被引用变量名 ;

举例:定义1个int型变量x及其引用变量xa

1
2
3
4
int x ; int &xa = x; // 称 xa 是 x 的一个引用

int x, &xa = x ; // 可在一条定义语句中完成
int x, y, &xa = x; // 一条定义变量语句可既包括普通变量,又包括引用变量

指针:内存地址

C++语法:取地址运算符“&”

举例:已定义变量x:int x = 10;
cout << x; // 显示变量x内存单元中保存的数值:10
cout << &x; // 显示变量x的内存地址

使用指针变量应当注意的问题

  • 指针变量应当先赋值,再间接访问
1
2
int *p;
cout << *p; // 错误
  • 指针变量不能用整数来赋值
1
2
int *p = 10; // 错误
int *p = 0; // 赋值为0,表示p不指向任何变量
  • 指针变量的指向类型应当与所指向变量的类型一致
  • 相同类型指针变量之间可以相互赋值

指向常变量的指针

可以定义指向常变量的指针,通过该指针变量不能修改所指向
的常变量的值

1
2
3
4
const int *p;
p = &x;
cout << *p; // 正确
*p = 15; // 错误

定义指针类型的常变量(即指针常变量)

需定义时初始化,以后不能再改变
其指向

1
2
3
int x = 10, y = 20;
int * const p = &x;
p = &y; // 错误
1
2
3
4
5
6
7
8
9
10
11
12
13
// 条件 == 0 或者这么理解: 0为false, 取反为true
if (!0) {
cout<<1<<endl;
} else {
cout<<0<<endl;
}

// 条件 == 0 或者这么理解: 非0为true, 取反为false
if (!1) {
cout<<1;
} else {
cout<<0;
}