• 面向对象-指针、指针常量、常量指针


    前言:什么是指针?

    每个变量名在运行时都要对应一块内存地址。

    int a=5; //a的地址是1000 内存: 1000-1003 4字节
    
    int* p; //p的地址是2000 内存: 2000-2007 8字节
    
    p=&a;
    

    p变量的变量空间2000-2007里存放了a的地址1000

    p的空间和p所指的空间含义不同,前者是2000-2007,后者是所指空间的首地址1000

    这也就引出了一个问题:如何从指针的首地址后读取数据 -> 指针有类型的原因

    int* p; 说明了从指针所指的地址后如何读取数据,比如此就是从1000开始读取4个字节

    to be short 指针变量p的空间存的是指针变量p的地址,p的值就是a的内存空间的首地址
    在这里插入图片描述

    #include <bits/stdc++.h>
    using  namespace std;
    typedef int ty;
    int main()
    {
        ty a=20;
        ty* p;
        p=&a;///将模块a的地址赋给指针变量p
        cout<<"指针变量p的空间地址是:"<<&p<<endl;
        cout<<"指针的大小是:"<<sizeof p<<endl;
    
        cout<<"指针变量p的值是:"<<p<<endl;
        cout<<"a的空间首地址是:"<<&a<<endl;
    
        cout<<"指针变量p所指的空间的值是:"<<*p<<endl;
        cout<<"a的值是:"<<a<<endl;
        return 0;
    }
    
    

    指针常量与常量指针

    #include <bits/stdc++.h>
    using  namespace std;
    int main()
    {
        const int b=5;
    
        int a=10;
    
        ///int * const p=&a;///指针常量,需要开始就赋值,指向谁不能更改,但可以更改a的值
    
        int const *q;///常量指针:可以理解为指向常量的指针,指针可以改变,指向的值不能改变 无法通过常量指针修改a的值(a是变量时)
        q=&a;
        cout<<*q;
        return 0;
    }
    
    
    
    ///指针的介绍,常量指针和指针常量
    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1e6+7;
    int main(){
    ///首先要明确:每个变量运行时都对应一块内存地址
        int a=5;///假设a的地址是1000,所占的内存为4个字节,即从1000~1003
        int* p=&a;///假设p的地址是2000,所占的内存是8个字节,即从2000~2007
        ///指针变量p的值是存储的a的空间首地址
        ///p的空间是2000~2007,p所指的空间是a的首地址1000
        cout<<"指针变量p的空间地址是:"<<&p<<endl;
        cout<<"指针的大小是:"<<sizeof p<<endl;
    
    ///这也就引出了一个问题:指针如何从首地址后读取数据
        ///根据*p的类型决定从指针读取数据的方式,比如int* p表示从记录的首地址往后读取4个字节的数据
        cout<<"指针变量p的值是:"<<p<<endl;
        cout<<"a的空间首地址是:"<<&a<<endl;
        cout<<"指针变量p所指的空间的值是:"<<*p<<endl;
        cout<<"a的值是:"<<a<<endl;
    
    ///接下来介绍一下指针常量和常量指针
        const int b=5;
        int c=10;
    ///指针常量
        ///可以理解为const 修饰指针,所以需要开始就赋值,指向谁也不能更改,但是可以通过其他方式更改c的值
        int * const q=&c;
        cout<<*q<<endl;
        c=110;
        cout<<*q<<endl;
        ///q=&a;
    
    ///常量指针
        ///可以理解为“常量”的指针,这里的常量指的是无法通过指针修改a的值,可以不用初始化
        int const *w;
        w=&b;
        cout<<*w<<endl;
        ///*w=1001;
        return 0;
    }
    
    
  • 相关阅读:
    》》》oracle新建用户
    SVN(subversion )服务端和客户端的下载安装使用
    《《《 【WEB前端】零基础玩转微信小程序——在vscode(Visual Studio Code)安装easy less
    《《《 【WEB前端】零基础玩转微信小程序——新建⼩程序项⽬
    《《《 【WEB前端】零基础玩转微信小程序——新建一个项目页面
    《《《 【WEB前端】零基础玩转微信小程序中的 相关代码dome03.wxml
    cocos2dx 流光着色器
    [NCTF2019]True XML cookbook
    [BJDCTF2020]EasySearch
    [GKCTF2020]老八小超市儿
  • 原文地址:https://www.cnblogs.com/OvOq/p/14853153.html
Copyright © 2020-2023  润新知