指针变量在C++编程中起着至关重要的作用,它们是内存地址的代理,允许程序员直接操作内存中的数据。在谭浩强的经典C++教程中,指针变量被明确地定义为只能存储地址,不能存储实际数据。例如,在提供的代码示例中:
```cpp
int *p, i; // 定义两个指针,p用于存储整型变量的地址,i是一个整型变量
p = 100; // 这是非法的,因为p应该指向一个地址,而不是一个整数值
p = &i; // 正确的赋值方式,将i的地址赋给p
void main() {
int a = 10, b = 100; // 定义两个整型变量a和b
int *p1 = &a, *p2 = &b; // 定义两个指针,分别指向a和b
cout << a << '\t' << b << endl; // 输出原始变量的值
cout << *p1 << '\t' << *p2 << endl; // 输出指针所指向的变量值,即a和b
// 表示的是:
// 指针p1引用a(&a表示a的地址),p2引用b(&b表示b的地址)
// 因此输出结果是:
// 10 100
// 10 100
}
```
在C++中,指针变量的使用涉及以下几个关键概念:
1. 非法赋值:如 `p = 100` 是错误的,因为指针应存储变量的内存地址,而非数据值。试图给指针赋一个非地址的值会导致编译错误。
2. 指针赋值:通过 `p = &i`,我们将变量 `i` 的地址赋给指针 `p`,这样就可以通过指针访问 `i` 的值。
3. 指针引用:`*p1` 和 `*p2` 是指针解引用操作,它们表示 `p1` 和 `p2` 所指向的变量的值,即 `a` 和 `b`。
4. 表示指向:`&a` 和 `&b` 分别表示变量 `a` 和 `b` 的地址,这些地址被指针 `p1` 和 `p2` 存储。
5. C++语言背景:谭浩强的C++教程提及了C语言的发展历程,C++起源于1972年Dennis Ritchie和Brian Kernighan为UNIX操作系统开发的C语言。C++是在C语言基础上发展起来的,增强了面向对象编程特性。C语言的特点包括结构化编程、灵活性、可移植性和语法的宽松性(这使得高级和低级操作的结合成为可能,但也增加了调试的挑战)。
6. 结构化编程:C++支持结构化编程,允许设计复杂的程序结构,适用于各种规模的项目,从小型控制程序到大型系统程序。
7. 可移植性:C语言编写的程序能够在不同的计算机平台上运行,只需稍加调整,提高了程序的实用性。
8. 语言特点:C++提供了丰富的运算符,包括算术、逻辑和位操作,以及灵活的数据结构,使得程序表达力强且高效。
理解指针变量的引用是C++编程的基础,它涉及到内存管理、数据间接访问以及程序设计的底层逻辑。熟练掌握这一概念对于提升C++编程能力至关重要。