一、指针是什么?
指针是一个变量,它的值是另一个变量的地址,即内存位置的直接地址。* 是用来指定一个变量是指针。
int var = 20;//声明普通变量
int *ip;//声明指针
ip = &20;//指针变量存储var的地址
cout<<ip<<endl;//输出为一个地址值
cout<<*ip<<endl;//输出为var的值(即地址对应的值)
二、指针的算术运算
1、++,指针自动运行到下一个地址
#include <iostream>
using namespace std;
const int MAX = 3;
int main ()
{
int var[MAX] = {10, 100, 200};
int *ptr;
// 指针中的数组地址
ptr = var;
for (int i = 0; i < MAX; i++)
{
cout << "Address of var[" << i << "] = ";
cout << ptr << endl;
cout << "Value of var[" << i << "] = ";
cout << *ptr << endl;
// 移动到下一个位置
ptr++;
}
return 0;
}
执行当前代码,输出
Address of var[0] = 0xbfa088b0
Value of var[0] = 10
Address of var[1] = 0xbfa088b4
Value of var[1] = 100
Address of var[2] = 0xbfa088b8
Value of var[2] = 200
2、-- 和++ 同理,只是反向
#include <iostream>
using namespace std;
const int MAX = 3;
int main ()
{
int var[MAX] = {10, 100, 200};
int *ptr;
// 指针中最后一个元素的地址
ptr = &var[MAX-1];
for (int i = MAX; i > 0; i--)
{
cout << "Address of var[" << i << "] = ";
cout << ptr << endl;
cout << "Value of var[" << i << "] = ";
cout << *ptr << endl;
// 移动到下一个位置
ptr--;
}
return 0;
}
输出
Address of var[3] = 0xbfdb70f8
Value of var[3] = 200
Address of var[2] = 0xbfdb70f4
Value of var[2] = 100
Address of var[1] = 0xbfdb70f0
Value of var[1] = 10
三、指针可以为数组、指针
可以声明指针数组 *var[3] 、 指针的指针 **prt
四、传递指针给函数
1、允许传递指针给函数,并且可以在函数内,改变该值;
2、能够接受指针作为参数的函数,也能接受数组作为参数。
3、函数能够返回指针
五、指针的对象的初始化。
特别需要注意的点是,在指针对象中含有指针对象的情形下,在实例化外层的对象后,需要对内部的对象也要执行实例化。