c++中的指针问题

  c++和C语言一样,都有指针,指针通过变量的存储位置访问变量内容并进行修改,与引用不同的是,引用仅仅是给变量取一个别名,并不是一个对象,而指针则是一个对象。

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int i=5;
 6     int &temp_i=i;
 7     cout<<i<<endl;
 8     temp_i=6;
 9     cout<<i;
10 }

  上述代码为引用的例子,通过引用,我们为变量i起了一个别名temp_i,对其进行操作就是对i进行操作。

  在指针中,我们同样要用到&符号,不过这里是取址。

#include<iostream>
using namespace std;
int main()
{
    int i = 5;
    int *p = &i;   //p中存放变量i的地址
    cout<<*p<<endl; //通过解引用访问该对象
    *p=10;
    cout<<i;
}

  我们通过i的地址找到i,并对其进行操作。指针在定义时,必须要进行初始化,否则很容易成为野指针而出现问题,在新标准中,推荐使用nullptr进行初始化指针。

  指针是一个对象,他可以指向一个值的地址,那个值也是一个对象,所以,也会有指向指针的指针,但是没有引用的引用。

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int i = 5;
 6     int *p1 = &i;
 7     int **p2 = &p1;
 8     cout<<p1<<endl;
 9     cout<<*p2<<endl;
10     *p1=10;
11     cout<<i;
12 }

  上述代码为指针的指针,由于p1是指向i的指针,p2是指针的指针,它指向了p1的存储地址。

      

  通过运行结果我们可以看出,p1是i的地址,p2解引用后就是p1存放的地址,所以,p2是指向p1的指针。

  另外,既然指针是一个对象,那么就存在指针的引用。

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int i = 5;
 6     int *p = &i;
 7     int *&temp = p;   //指针的引用
 8     cout<<*temp<<endl;
 9     *temp = 6;
10     cout<<*temp<<endl;
11 }

  对于指针的引用,他的定义格式是这样的:离定义名称最近的就是该变量的类型,所以,离temp最近的是&,所以,temp是一个引用,&之前是*,所以temp是一个指针的引用,最后,它是int型的。

原文地址:https://www.cnblogs.com/wktwj/p/4437916.html