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

简介: 面向对象-指针、指针常量、常量指针

前言:什么是指针?

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

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的内存空间的首地址

20200401134307494.png

#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;
}
目录
相关文章
|
8月前
引用的本质:指针常量
引用的本质:指针常量
35 0
|
20天前
|
人工智能 C++
【重学C++】【指针】轻松理解常量指针和指针常量
【重学C++】【指针】轻松理解常量指针和指针常量
21 0
|
1月前
|
存储 编译器 程序员
【C++】类和对象①(什么是面向对象 | 类的定义 | 类的访问限定符及封装 | 类的作用域和实例化 | 类对象的存储方式 | this指针)
【C++】类和对象①(什么是面向对象 | 类的定义 | 类的访问限定符及封装 | 类的作用域和实例化 | 类对象的存储方式 | this指针)
|
3月前
|
编译器 C语言 C++
深入探究C语言中的常量指针与野指针概念及其应用
深入探究C语言中的常量指针与野指针概念及其应用
21 1
|
4月前
|
存储 Java 编译器
C++——类和对象(了解面向过程和面向对象、初步认识类和对象、类大小的计算、this指针)
C++——类和对象(了解面向过程和面向对象、初步认识类和对象、类大小的计算、this指针)
|
4月前
|
C++
面试题:常量指针和指针常量?
面试题:常量指针和指针常量?
21 0
|
5月前
|
编译器 C++
C++ 中 const 和 constexpr 关键字解析:常量、函数和指针
很多 C++ 的初学者看到 const 这个关键字的第一反应都是一头雾水,主要是因为 const可 以出现在很多的位置,以及后面加入的 constexpr 更是常常感到困惑,今天就为大家一一解释出现它们的含义和以及作用
108 0
|
10月前
|
存储 算法 安全
04-📝C++核心语法|面向对象2【友元、内部类与局部类、强化训练(数组类封装)、运算符重载、仿函数、模板、类型转换、 C++标准、错误&&异常、智能指针】
复习`C++核心语法`,且适当进行汇编探索底层实现原理,进一步夯实基础,为以后的`底层开发`、`音视频开发`、`跨平台开发`、`算法`等方向的进一步学习埋下伏笔。
04-📝C++核心语法|面向对象2【友元、内部类与局部类、强化训练(数组类封装)、运算符重载、仿函数、模板、类型转换、 C++标准、错误&&异常、智能指针】
|
9月前
|
存储 编译器 C语言
【C++精华铺】4.C++类和对象(上)面向对象、类、this指针
class为定义类的关键字,{}中的内容为类的类体,里面定义的内容称之为成员,类中的变量称之为类的属性或者类的成员变量,ClassName为类名,并且大括号后面的分号”;“一定不能省略。//类体类有俩种定义方式:声明和定义全部放在类体中(成员函数在类体中定义,编译器可能会将其作为内联函数处理)class Datepublic://private:int _year;int _month;int _day;类声明放在.h文件中,成员函数定义在.cpp文件中(成员函数前要加上。
|
安全 Java 编译器
C生万物 | 常量指针和指针常量的感性理解
常量指针是指针吗❓指针常量是常量吗❓它们有何区别,本文告诉你👈
75 0
C生万物 | 常量指针和指针常量的感性理解