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

前言:什么是指针?

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

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;
}

posted @ 2020-04-12 14:31  OvO1  阅读(54)  评论(0编辑  收藏  举报