zoukankan      html  css  js  c++  java
  • 面向对象-指针、指针常量、常量指针

    前言:什么是指针?

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

    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;
    }
    
    
  • 相关阅读:
    iOS 苹果开发证书失效的解决方案(Failed to locate or generate matching signing assets)
    iOS NSArray数组过滤
    App Store2016年最新审核规则
    iOS 根据字符串数目,自定义Label等控件的高度
    iOS 证书Bug The identity used to sign the executable is no longer valid 解决方案
    Entity FrameWork 增删查改的本质
    EF容器---代理类对象
    Entity FrameWork 延迟加载本质(二)
    Entity FrameWork 延迟加载的本质(一)
    Entity FrameWork 增删查改
  • 原文地址:https://www.cnblogs.com/OvOq/p/14853153.html
Copyright © 2011-2022 走看看