指针:
1.指针能够让程序更加简洁
2.指针能够让程序更加高效
3.指针提供了一种间接访问变量的方式
1.指针的基本概念
地址:用来区分不同内存字节空间的一个编号
指针:指针就是地址,地址就是指针, 地址是一个编号,指针多了指向的概念
指针变量:一个用来存放指针(地址)的变量,使用变量就是使用变量中存放的指针,所以有时也将指针变量简称为指针
2.指针相关的运算符:
&:获得变量在内存空间中的首地址
注意:
1.只能对变量&操作
2.&运算符连接表达式的结果为该变量在内存空间中的首地址
3.&运算符会让类型升级
*:左值:将右值放入指针指向的空间
右值:直接取指针对应空间中的值
注意:
1.只能对指针进行 * 操作
2.*运算符能够让类型降级
3.对int * *运算符获得该地址开始向下4字节空间中的值
对double * *运算符获得该地址开始向下8字节空间中的值
对char * *运算符获得该地址开始向下1字节空间中的值
如果*和&同时出现,等价于去掉*&运算符后的结果
3.指针变量的定义:
数据类型 *变量名;
指针均占8个字节,int* 指向4字节空间, double* 指向8字节空间, char* 指向1字节空间
在64位操作系统中,所有指针均占8个字节
野指针:未经初始化的指针或指向已经被释放过空间的指针
注意:
不要使用未经初始化的指针
4.指针的初始化
int *p = NULL;
NULL:空指针(指向内存地址为0x0的指针)
int num = 100;
int *p = #
5.指针的算数运算:
++:向内存高地址偏移指向数据类型大小个字节空间
--:向内存低地址偏移指向数据类型大小个字节空间
两个相同类型的指针相减:获得两个地址中间相差了多少个该类型的元素
6.指针常见的操作:
int a = 100;
int b = 200;
int *p = NULL;
int *q = NULL;
指针中:
1.指针变量本身,也就是p,修改p的值可以改变指针变量的指向
2.指针变量指向的空间,也就是*p,修改*p的值并不能改变指针变量的指向,只是利用指针修改对应空间中的值
7.指针作为函数参数:
1.值传递:
实参将值传递给形参,形参改变,实参不会受影响
函数体内想使用函数体外部变量值的时候使用复制传递(赋值传递)
2.地址传递
实参将地址给形参,形参是实参的指针,可以通过对形参取*改变实参的值
函数体内想修改函数体外部变量值的时候使用地址传递
8.指针和数组的关系:
访问数组下标为n的元素:
a[n] == *(a+n) == *(p+n) == p[n]
指针[偏移量] == *(指针 + 偏移量)
9.数组作为函数参数:
第一种:
int fun(int array[], int len);
第二种:
int fun(int array[5]);
第三种:
int fun(int *parray, int len);
注意:
三种形式均传入的是指针,最好使用第三种
嵌入谁学习第九天
最新推荐文章于 2024-09-14 21:48:00 发布
本文详细介绍了指针在编程中的重要性,包括其在简洁性和效率提升上的作用,基本概念如地址、运算符使用、指针变量定义,以及指针的初始化、算数运算、作为函数参数和与数组的关系。特别强调了正确处理指针和避免野指针的重要性。
摘要由CSDN通过智能技术生成