1.计算机程序在存储数据时必须跟踪3种基本属性。(1)信息存储在何处(2)存储的值为多少(3)存储的信息是什么类型
指针是一个变量,其存储的是值的地址,而不是值本身。如何找到常规变量的地址。只需对变量应用地址运算符(&),就可以获得它的位置;例如,如果home是一个变量,则&home是它的地址。如下实例:
#include<iostream>
using namespace std;
int main()
{
int counts = 6;
double cups = 4.5;
cout<<"counts value = "<<counts<<" and counts address = "<<&counts<<endl;
cout<<"cups value= "<<cups<<" and cups address = "<<&cups<<endl;
return 0;
}
用常规变量时,值是指定的量,而地址为派生量。指针策略,它是C++内存管理编程理念的核心。面向对象编程与传统的过程性编程的区别在于,OOP强调的是在运行阶段(而不是编译阶段)进行决策。运行阶段指的是程序正在运行时,编译阶段指的是编译器将程序组合起来时。处理存储数据的新策略是将地址视为指定的量,而将值视为派生量。一种特殊类型的变量,指针。用于存储值的地址。因此,指针名表示的是地址。*运算符被称为间接值(indirect value)或解除引用(dereferencing)运算符,将其应用于指针。可以得到该地址处存储的值。如下示例:
//实例2
#include<iostream>
using namesapace std;
int main()
{
int updates = 6;//声明一个变量
int* p_updates;//声明一个指向整数的指针
p_updates = &updates;//把一个指向整数的指针赋值给指针
cout << "Value : updates =" << updates;
cout << ", *p_updates = " << *p_updates << endl;
cout << "Address: &updates = " << &updates;
cout << ", p_updates = " << p_updates << endl;
*p_updates = *p_updates + 1;
cout << "Now updates = " << updates << endl;
updates = 10;
cout << *p_updates << endl;
return 0;
}
//学习观点1.通过把指针指向的值重新赋值,改变原先变量的值
输出结果如图所示:
从中可知:int变量updates和指针变量p_updates只不过是同一枚硬币的两面。变量updates表示值,并使用&运算符来获得地址;而变量p_updates表示地址,并使用*运算符来获得值。由于p_updates指向updates,因此*p_updates和updates完全等价。可以像使用int变量那样使用*p_updates。甚至可以赋值给*p_updates。这样将修改指向的值。