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