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 jni/ndk编程五:jni异常处理
    Android jni/ndk编程四:jni引用类型
    Android jni/ndk编程三:native访问java
    Android jni/ndk编程二:jni数据类型转换(primitive,String,array)
    Android jni/ndk编程一:jni初级认识与实战体验
    C++静态库与动态库
    Android——NativeActivity
    Eclipse IDE for C/C++ Developers和MinGW安装配置C/C++开发学习环境详解
    Android OkHttp3简介和使用详解*
    Android MVP 设计模式*
  • 原文地址:https://www.cnblogs.com/wktwj/p/4437916.html
Copyright © 2011-2022 走看看