面向對象-指針、指針常量、常量指針

前言:什麼是指針?

每個變量名在運行時都要對應一塊內存地址。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章