c++关于指针的理解

简介:

指针可以简化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 }
View Code

定义:

指针:是一个变量,它的值是另一个变量的地址。在使用前要对它进行声明和赋值。

空指针:

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 }
View Code

执行结果是: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 }
View Code

编译结果:

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 }
View Code

运行结果:

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

猜你喜欢

转载自www.cnblogs.com/fanhua666/p/11504913.html
今日推荐