面向对象-指针、指针常量、常量指针
前言:什么是指针?
每个变量名在运行时都要对应一块内存地址。
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;
}