指针:
- 1、指针的引入
- 2、指针变量定义语法
- 3、指针变量的赋值
- 3.1、指针变量的指向说明
- 3.2、指针变量赋值为其他变量的地址
- 3.3、指针变量操作指向的内存空间
- 3.4、指针变量不初始化的影响
- 3.5、野指针
- 3.6、空指针
- 3.7、面试题解读
- 4、不同类型指针变量之间的区别
- 4.1、int *p1 和 char *p2 的相同点是什么?
- 4.2、int *p1 和 char *p2 的不同点是什么?
- 4.3、p1++ 和 p2++的区别
1、指针的引入
1、一般把内存中的一个字节称为一个内存单元
2、为了正确地访问这些内存单元,必须为每个内存单元编上号。根据一个内存单元的编号即可准确 地找到该内存单元。内存单元的编号也叫做地址,通常也把这个地址称为指针
3、如果在程序中定义了一个变量,在对程序进行编译或运行时,系统就会给这个变量分配内存单 元,并确定它的内存地址(编号)
4、变量的地址就是变量的指针,存放变量地址的变量是指针变量
5、内存单元的指针和内存单元的内容是两个不同的概念。可以用一个通俗的例子来说明它们之间的 关系。我们到银行去存取款时,银行工作人员将根据我们的帐号去找我们的存款单,找到之后在存单 上写入存款、取款的金额。在这里,帐号就是存单的指针,存款数是存单的内容。对于一个内存单元 来说,单元的地址即为指针,其中存放的数据才是该单元的内容。
---------------------------------------------------------------------------------------------------------------------------------
2、指针变量定义语法
数据类型 *指针变量名;
注意:
1、数据类型为C语言支持的所有数据类型
2、指针变量名遵循C语言变量的命名规则
举例:
int *p; //定义了一个指针变量p,简称指针p,p是变量, int *是类型
char* p2;
指针也是一种数据类型。
---------------------------------------------------------------------------------------------------------------------------------
3、指针变量的赋值和使用
1、指针变量的值代表这个指针指向了以这个值为首地址的那块内存空间
2、指针变量赋值为其他变量的地址
指针变量 = &变量名;
&:取地址运算符
3、指针变量操作指向的内存空间
可以通过指针变量访问和修改所指向的内存空间中的内容。
*:指针运算符(或称“间接访问” 运算)。
4、指针变量同普通变量一样,定义后如果不进行初始化指针变量的值是不确定地的
5、野指针
因为指针变量的值是不确定的,所以这个指针我们称之为“野指针”。
重点:野指针的危害:因为指针指向的空间是不确定的,所以指针可能会操作到非法的内存空间,导致程序 运行奔溃。
6、空指针
为了标志指针变量没有指向任何变量(空闲可用),C语言中,可以把NULL赋值给此指针,这样就标志 此指针为空指针。
注意:空指针的作用是防止指针变量变成野指针。如果用*访问空指针所指向的内存空间也会程序报错
7、笔试题:
注意:在实际工作中我们一般很少会将一个确定的内存地址赋值给一个指针变量,因为程序员一般不 知道哪个内存地址是可用的!!!
--------------------------------------------------------------------------------------------------------------------------------
4、不同类型指针变量之间的区别
1、int *p1 和 char *p2 的相同点是什么?
2、int *p1 和 char *p2 的不同点是什么?
首先我们应该知道:内存中存储的只是二进制而已 。之所以有 int float char 等数据类型是程序员希望将存储在内存中的二进制当作某种数据类型来 处理而已
int *p1的作用就是指针变量p1将他所指向的内存空间中的二进制当作int类型来处理
char *p2的作用就是指针变量p2将他所指向的内存空间中的二进制当作char类型来处理。
3、p1++ 和 p2++的区别