• 指针与引用


    指针

    指针,其值为另一个变量的地址,即内存位置的直接地址。
    声明形式:如:int *p;
    使用指针时会频繁进行以下几个操作:定义一个指针变量、把变量地址赋值给指针、访问指针变量中可用地址的值。

    #include 
    using namespace std;
     
    int main ()
    {
       int  n= 2;   // 实际变量的声明
       int  *p;        // 指针变量的声明
       p = &n;       // 在指针变量中存储 n 的地址
       cout << "n: "<< n << endl;
       // 输出在指针变量中存储的地址
       cout << "n的地址: "<< p << endl;
       // 访问指针中地址的值
       cout << "n的值为: "<< *p << endl;
     
       return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    结果:

    n: 2
    n的地址: 0x7ffc45587908
    n的值为: 2

    null指针

    在变量声明的时候,如果没有确切的地址可以赋值,可以为指针变量赋一个 NULL 值。赋为 NULL 值的指针被称为空指针。int *p=NULL;

    指针的算术运算

    指针递增

    #include 
    using namespace std;
     
    int main ()
    {
       int  nums[3] = {10,20,30};
       int  *p;
     
       // 数组中的第一个元素的地址
       p = nums;
       for (int i = 0; i <3; i++)
       {
          cout << "nums" << i << "的地址为:";
          cout << p<< endl;
          cout << "nums" << i << "的值为: ";
          cout << *p << endl;
          // 移动到下一个位置
          p++;
       }
       return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    结果:

    nums0的地址为:0x7ffd6f6e7970
    nums0的值为: 10
    nums1的地址为:0x7ffd6f6e7974
    nums1的值为: 20
    nums2的地址为:0x7ffd6f6e7978
    nums2的值为: 30

    指针递减

    同上,只需把p的指针在开始时指向数组的最后一个元素,即p=&nums[2];然后让p--即可。

    指针比较

    #include 
    using namespace std;
     
    int main ()
    {
       int  nums[3] = {10, 20, 30};
       int  *p;
       // 指针中第一个元素的地址
       p = nums;
       int i = 0;
       for(int i=0;i<3;i++){
           if(p<=&nums[2]){
                cout << "nums[" << i << "]的地址为: ";
                cout << p << endl;
                cout << "nums[" << i << "]的值为:";
                cout << *p << endl;
                p++;
            }
        }
       return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    指向指针的指针(多级间接寻址)

    通常,一个指针包含一个变量的地址。当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置。声明如下:int **p;
    实例:

    #include 
     
    using namespace std;
     
    int main ()
    {
        int  n=10;
        int  *p;
        int  **pp;
        // 获取n的地址
        p = &n;
        // 使用运算符 & 获取 p 的地址
        pp = &p;
        // 使用 pp 获取值
        cout << "n值为 :" << n << endl;
        cout << "*p值为:" << *p << endl;
        cout << "**pp值为:" << **pp << endl;
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    结果

    n值为 :10
    *p值为:10
    **pp值为:10

    引用

    形式:

    int i=17;
    double d=11.7;
    int &r=i;
    double &s=d;
    
    • 1
    • 2
    • 3
    • 4

    把引用作为返回值

    double &test(int i){
    	double &ref=i;
    	return ref;//正确
    	int x;
    	//return x;//错误
    	static int x;
    	return x;//正确
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    当返回一个引用时,要注意被引用的对象不能超出作用域。所以返回一个对局部变量的引用是不合法的,但是,可以返回一个对静态变量的引用。

  • 相关阅读:
    计算机毕业设计django基于python少儿编程线上教育系统(源码+系统+mysql数据库+Lw文档)
    深入理解左倾红黑树 | 京东物流技术团队
    SSM整合 Spring SprintMVC Mybatis
    C++设计模式——单例模式
    PPT基础:编辑顶点
    Istio(二):在Kubernetes(k8s)集群上安装部署istio1.14
    机器学习强基计划7-2:图文详解K-均值聚类(K-means)算法(附Python实现)
    两个栈实现一个队列
    字符串定义
    安装适配依赖
  • 原文地址:https://blog.csdn.net/xue208212674/article/details/126342319