简介:
指针可以简化c++编程,在一些任务中没有指针是无法完成的(动态内存分配)
使用 & 可以获得变量在内存中的地址:
eg:
1 #include <iostream> 2 3 using namespace std; 4 5 int main () 6 { 7 int var1; 8 char var2[10]; 9 10 cout << "var1 变量的地址: "; 11 cout << &var1 << endl; 12 13 cout << "var2 变量的地址: "; 14 cout << &var2 << endl; 15 16 return 0; 17 }
定义:
指针:是一个变量,它的值是另一个变量的地址。在使用前要对它进行声明和赋值。
空指针:
NULL:为空指针,如果没有确切的地址可以赋值,为指针赋值一个null是一个好的习惯。
eg:
1 #include <iostream> 2 3 using namespace std; 4 5 int main () 6 { 7 int *ptr = NULL; 8 9 cout << "ptr 的值是 " << ptr ; 10 11 return 0; 12 }
执行结果是:ptr 的值是 0
大多数操作系统中程序是不允许访问地址为0的内存。该内存视为操作系统保留的,他可以表明指针不指向一个可以访问的内存,所以如果指针包含空值就假定它不指向任何东西。
对于空指针的的检查:
if (ptr) 或if (!ptr) 未初始化的变量存在垃圾直,会使程序的调试难以进行。
指针的运算:
指针可以进行 ++、 +、 -、 -- 运算。
如果ptr是指向1000的整形指针,ptr++是指向1004位置的指针。每增加一次往后移动4个字节,如果是字符型指针,ptr++指向1001,往后移动一个字节。
通常使用++、 -- 是在使用指针代替数组的时候使用。
eg:
1 #include <iostream> 2 3 using namespace std; 4 const int MAX = 3; 5 6 int main () 7 { 8 int var[MAX] = {10, 100, 200}; 9 int *ptr; 10 11 // 指针中的数组地址 12 ptr = var; 13 for (int i = 0; i < MAX; i++) 14 { 15 cout << "Address of var[" << i << "] = "; 16 cout << ptr << endl; 17 18 cout << "Value of var[" << i << "] = "; 19 cout << *ptr << endl; 20 21 // 移动到下一个位置 22 ptr++; 23 } 24 return 0; 25 }
编译结果:
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
指针的比较:
指针可以使用关系运算符进行比较:== 、<、>
eg:
1 #include <iostream> 2 3 using namespace std; 4 const int MAX = 3; 5 6 int main () 7 { 8 int var[MAX] = {10, 100, 200}; 9 int *ptr; 10 11 // 指针中第一个元素的地址 12 ptr = var; 13 int i = 0; 14 while ( ptr <= &var[MAX - 1] ) 15 { 16 cout << "Address of var[" << i << "] = "; 17 cout << ptr << endl; 18 19 cout << "Value of var[" << i << "] = "; 20 cout << *ptr << endl; 21 22 // 指向上一个位置 23 ptr++; 24 i++; 25 } 26 return 0; 27 }
运行结果:
Address of var[0] = 0xbfce42d0 Value of var[0] = 10 Address of var[1] = 0xbfce42d4 Value of var[1] = 100 Address of var[2] = 0xbfce42d8 Value of var[2] = 200