首先 可以通过指针来保存一个地址
简单说:指针就是一个地址? ? 可以将其理解为指针定义
别人问你 指针是什么? 大声告诉他指针就是一个地址
定义指针 语法:数据类型 * 指针变量名
? ? ? ? ? ? ? ? 例如:? ? ? ? int? ? ? *? ? ? ?p
int a =10;? int*p;
p????????=????????&a;? ? ? ?p保存了a的地址? ? 可知p是指针
0xAA5c? ? ? ?0xAA5c
?指针前加*代表解引用,指到指针指向内存的数据
*p=10;? ? ? ? ? ? ? ? 可赋值修改参数
int *p;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?两个等于? ?int *p=a;(创建的指针直接指向a数据地址)
p =&a;
空指针:指针变量指向内存中编号为0的空间 (初始化)? ? ? ? ? ? ? ?如图所示??
?
指向0点位置? ? ? 0-255是系统内存
野指针:指针变量指向非法的内存空间
//不要运行该代码
#include<iostream>
using namespace std;
int main(){
//野指针:指针变量指向非法的内存空间
int * p=(int *)0x1100; //没申请
//访问野指针报错
cout<<*p<<endl;
system("pause");
return 0;
}
//总结:空指针和野指针都不是我们申请的空间,因此不要访问
int * p=(int *)0x1100; //没申请
这一句是核心代码? 他直接调了一个没申请的内存,所以编译成功,但运行不成功
总的来说一句
空指针不空,野指针不野
接下来讲常量指针和指针常量? ? ? ? 看const位置
就名字就能看出 ????????哪个放到前面哪个就更重要?
例如? 常量指针??
int *const p=&a;
特点:指针指向(地址)可以修改,但指针指向指向的值不可以修改
p=&b;? 对
*p=20;? 错
?
例如? 指针常量??
const int *p2=&a;
特点:指针指向(地址)不可以修改,指针指向指向的值可以修改
*p2=100;? ? 对
p2=&b;? ? ?错
#include<iostream>
using namespace std;
int main(){
//看*和const位置关系
//1.const int * p=&a; 常量指针---常量重要
//特点:指针的指向(地址)可以修改,但是指针指向的值不可以修改
int a=10;
int b=10;
const int * p=&a;
//*p=20;错误的 值
p=&b;//正确的 地址
/*---------------------------------------------------------------*/
//2.int * const p=&a; 指针常量--指针指向重要
//特点:指针的指向不可以改,指针指向的值可以改
int * const p2=&a;
*p2=100;//正确的 值
//p2=&b;错误的 地址
/*---------------------------------------------------------------*/
//3.const int *const p=&a;
//特点:指针的指向和指针指向的值都不可以改
const int * const p3=&a;
// *p3=100;错误
// p3=&b;错误
system("pause");
return 0;
}
?