一、指针的理解

1、指针与地址的概念
指针:是一种【特殊】的数据类型,使用指针定义的变量,其所存储的内容为变量的地址,地址所指向的内容为变量的具体数值。
地址:操作系统中物理内存为存储单元分配的唯一编号。
2、指针变量的声明
(1、【指针数据类型】语法表示:
数据类型 *
eg:
int * //整型指针类型
char * //字符型指针类型
注意:指针数据类型所占用的内存大小为:32位操作系统:4B,64位操作系统:8B
(2、指针变量语法格式
指针数据类型 变量名 = 初始值;
eg:
int number = 12; //声明一个int类型的变量
int * p = &number; // 声明一个整型指针变量,指向一个整型变量的地址
注释:
// int: 整型数据类型
// * :表示指针类型
// p: 指针变量名
// = : 赋值运算符
// & : 取地址运算符
// number :用于初始化指针变量的整型变量
注意:此时指针p里储存的是整型变量number的地址。即指针p指向number。
3、指针运算符
【&】取地址运 算符。
【%p】使用%p打印一个地址编号,打印指针变量的值。

二、指针变量

1.它的值就是个地址编号.
2.指针变的值可以改变,存储一个新的地址,即指向另外的变量 。
3.多个指针可以有同样的值,即多个指针可以指向同一个变量 。

三、通过指针访问指针指向的变量

【*】解引用运算符,即间接引用运算符
【*】解引用运算符的作用
char aChar = 'G' ;
char*p=&aChar;
注意【*p】:访问指针p指向的变量aChar。【*p】放在赋值号右边,“读数据”p指向的变量的值'G' ;【*p】放在赋值号左边,“写数据”给指针p指向的变量aChar“写入”内容。
int a = 8;
int *p = & a;
*p = 10; //a=10 //*p=*&a= a
int c = (*p) + 43; //c=a+43;
EG:
指针p,指向变量x;
*p代表指针p指向的变量,*p就是变量x.对*p的操作,就相当于对x
的操作。

四、未初始化的指针

如果定义一个变没有初始化,它里面的内容是垃圾信息,不可被正常使用。
如果一个指针没有被初始化,它存储的是垃圾地址,该指针被称为野指针。(悬浮)

五、初始化指针

1.空指针:
当定义一个指针,你还不确定要指向个变时,就把它初始化为空。
int *p;
p=NULL;//c语言中,空指针的值可以用NULL和0来表示
或
p=0;
2.野指针和空指针有什么区别?
野指针: 未被初始化的指针,里面的内容是垃圾地址,即指向不确定;
空指针: 被初始化为NULL的指针,里面的地址是0,即指向空地址;
相同点:均不可以被解引用操作运算
3.在用到的地方对空指针进行初始化:
int a = 8;
int *p = a;
注意:
永远不要解引用一个空指针,否则将产生段错误!因为0号地址属于系统级
内存空间,不允许用户级程序来访问的。