指针 精讲

首先 可以通过指针来保存一个地址

简单说:指针就是一个地址    可以将其理解为指针定义

别人问你 指针是什么  大声告诉他指针就是一个地址

定义指针 语法:数据类型 * 指针变量名

                例如:        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的空间 (初始化)               如图所示  

 指针 精讲_第1张图片

指向0点位置      0-255是系统内存

野指针:指针变量指向非法的内存空间

//不要运行该代码 
#include
using namespace std;
int main(){
	//野指针:指针变量指向非法的内存空间 
	int * p=(int *)0x1100; //没申请 
	//访问野指针报错
	cout<<*p<

int * p=(int *)0x1100; //没申请

这一句是核心代码  他直接调了一个没申请的内存,所以编译成功,但运行不成功

总的来说一句

空指针不空,野指针不野

接下来讲常量指针和指针常量        看const位置

指针 精讲_第2张图片

就名字就能看出         哪个放到前面哪个就更重要 

例如  常量指针  

int *const p=&a;

特点:指针指向(地址)可以修改,但指针指向指向的值不可以修改

p=&b;  对

*p=20;  错

例如  指针常量  

const int *p2=&a;

特点:指针指向(地址)不可以修改,指针指向指向的值可以修改

*p2=100;    对

p2=&b;     错

#include
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;

	}

你可能感兴趣的:(50,c++,开发语言)