访问内存中的数据的两种方式
从内存单元中访问数据的方法有两种:直接访问和间接访问
直接访问
通过变量名,直接对变量的存储单元进行存取访问。
定义变量后,该变量名也就成为了相应内存空间的名称,表现在程序语句中就是通过变量名来存取变量内容
间接访问
根据变量的地址进行存取访问
指针变量与指针变量的定义
指针变量是一种特殊的变量,用于存放内存单位中单元的地址,即能存放地址的变量就是指针变量。
定义指针变量:数据类型 *指针变量名;
- " * "表示该变量为指针变量
- 指针变量前的数据类型规定了指针变量指向的变量的数据类型
例如:double *p;
定义变量p为指针变量,且指针变量p的值只能是一个double类型变量的地址
指针变量的三个要素:
- 变量名:与一般变量取名相同
- 指针变量的类型:指针所指向的变量类型,而不是自身的类型。指针变量本身均为long int类型
- 指针变量的值:是某个变量的内存地址
取地址运算符:&
取地址运算符&,是一个一元运算符,用来得到一个变量的地址
例如 int a;
&a表示变量a在内存中的起始地址。&后面必须是一个变量。
指针运算符:*
指针运算符 * 是一个一元运算符,表示指针变量所指向的变量的值(取值)。
注意 * 在不同地方出现的含义是不同的。
如:
int a=5,b,*p;
p=&a; // *p取指针变量p所指向的变量的值
b=*p; //(即p所指向的内存单元的内容)等价于b=a;
指针变量的初始化与赋值
指针变量初始化
- 在定义时赋值:数据类型 *指针名 =地址
- 指针赋值:指针变量=地址;
其中的“地址”可以是变量的地址、数组名等。
例:
int x = 8;
int *p = &x, *q;
q = p; //同类型的指针变量赋值
注意:用变量地址作为初值时,该变量必须在指针初始化之前定义
指针赋值的注意事项
- 不能把常量或者表达式赋给指针变量
p=&67;p=&(i+5) 是不合法的 - 不能讲一个整数赋给指针变量,但可以赋整数值0,0是可以直接赋给指针变量的唯一整数值,表示空地址
int *p;p=0; // p作为空指针,不指向任何地址
#include<iostream>
using namespace std;
int main ()
{
double a=15;
double *pa=&a;
double *pb;
pb=pa;
cout<<pa<<endl;
cout<<*pa<<endl;
cout<<pb<<endl;
return 0;
}
/*运行结果:
0020FC6C
15
0020FC6C
*/