zoukankan      html  css  js  c++  java
  • 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型的。

  • 相关阅读:
    android UI 适配小节
    Android中的倒计时实现
    几种适配器&观察者&ListView之间的那点事
    Service stopSelf(int statId)和onStartcommand(Intent intent,int flags,int startId)
    java 虚函数
    java 重载和多态的区别
    小程序体验版路径以及参数携带
    微信小程序--上传图片公用组件
    微信小程序页面返回
    js兼容安卓和IOS的复制文本到剪切板
  • 原文地址:https://www.cnblogs.com/wktwj/p/4437916.html
Copyright © 2011-2022 走看看