计算机程序在存储数据时跟踪三种基本数据:
?? ?1. 信息存储在何处;
?? ?2. 存储的值为多少;
?? ?3. 存储的信息是什么类型。
?? ?
????????通常我们为了达到上述的目的,会定义一个简单变量。声明语句指出了值的类型和符号名,还让程序为值分配内存,并在内部跟踪该内存单元。
????????下面来看另一种策略,它在开发C++类时非常重要。这种策略以指针为基础,指针是一个变
量,其存储的值是地址,而不是值本身。我们先看是如何找到常规变量的地址。只需对变量应用地址运算符(&),就可以获得它的位置。
????????显示地址时,我们经常使用十六禁止表示法,因为这是常用于描述内存的表示法(有些实
现可能使用十进制表示法)。
?? ?
????????使用常规变量时,值是指定的量,而地址为派生量。
????????处理存储数据的新策略刚好相反,将地址视为指定的量,而将值是为派生量。一种特殊类型的变量-- 指针用于存储值的地址。因此,指针名表示的是地址。*运算符被陈伟间接值或解引用运算符,将其应用与指针,可以得到该地址处存储的值(这和乘法使用的符号相同;C++根据上下文来确定所指的是乘法还是解引用)。
?? ?例如:假设ptr是一个指针,则ptr表示的是一个地址,而*ptr表示存储在该地址处的值。*ptr表示存储在该地址处的值。*ptr与常规int变量等效。
示例源码:
// Len_ptr.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
using namespace std;
int main()
{
int data = 5;
int *ptr;
ptr = &data;
// 显示值的两种方式
cout << "data = " << data << endl;
cout << "*ptr=" << *ptr << endl<<endl;
// 显示地址的两种方式
cout << "&data=" << &data << endl;
cout << "ptr=" << ptr << endl << endl;
// 通过指针去改变值
*ptr = *ptr + 1;
cout << "new data=" << data << endl;
}
执行结果: