在变量声明的时候,如果没有确切的地址可以赋值,可以为指针变量赋一个 NULL 值,赋为 NULL 值的指针被称为空指针。
NULL 指针是一个定义在标准库中的值为零的常量。请看下面的程序:
#include <iostream>
using namespace std;
int main ()
{
int *ptr = NULL;
cout << "ptr 的值是 " << ptr ;
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
ptr 的值是 0
当然,在大多数的操作系统中,程序不允许访问地址为0的,因为内存是操作系统保留的,所以内存地址为0有的特别的重要的意义,它表明该指针不指向一个可访问的的内存位置,如果指针包含空值,就假定它不指向任何东西
C++指针的算数运算
指针是一个数值表示的地址,所以您可以对指针进行算术运算,可以对指针进行四种不同算术运算
++,--,+,-
在程序里,我们喜欢使用指针来代替数组,因为变量指针可以递增,而数组不可以,因为数组是一个常量指针,下面这个程序是
递增变量指针,用来顺序访问数组每一个元素:
#include <iostream>
using namespace std;
const int Max = 3;
int main()
{
int var[Max] = {10,100,1000};
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] = 0x7ffe879961a0
value of var [0] = 10
Address of var[1] = 0x7ffe879961a4
value of var [1] = 100
Address of var[2] = 0x7ffe879961a8
value of var [2] = 1000
递减一个指针
#include <iostream>
using namespace std;
const int MAX = 3;
int main ()
{
int var[MAX] = {10, 100, 1000};
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] = 0x7ffdcdec4038
Value of var[3] = 1000
Address of var[2] = 0x7ffdcdec4034
Value of var[2] = 100
Address of var[1] = 0x7ffdcdec4030
Value of var[1] = 10