1. 指针的基本概念
1.1 地址
用来区别不同内存字节空间的编号
1.2 指针
地址就是指针,指针就是地址,地址是一个编号,指针多了指向的概念
1.3 指针变量
用来存放指针的变量,有时将指针变量简称为指针
2. 指针相关运算符
& —— 取地址运算符,获得变量在内存中的首地址
注意:
1. 只能对变量进行操作
2. &运算符连接表达式的值为变量在内存空间中的首地址
3. &会让变量升级
int -> int *
char -> char *
double -> double *
* —— 左值:创建指针变量 右值:取指针对应空间的值
注意:
1. 只有指针才能进行*运算
2. *运算让变量降级
int * -> int
double * -> double
char * -> char
3.
int *p *p获得该地址开始向下4字节空间中的值
double *p *p获得该地址开始向下8字节空间中的值
char *p *p获得该地址开始向下1字节空间中的值
4. 如果*和&同时出现,作用相互抵消:*&a == a
3. 指针变量的定义
数据类型 *变量名
int *p; p指向四个字节空间首地址
double *p; p指向八个字节空间首地址
char *p; p指向一个字节空间首地址
注意:
1. 在64位操作系统中,指针都占八个字节的空间
2. 野指针:未经初始化的指针或指向已经被释放空间的指针
3. 在指针定义时,必须要初始化,不能使用未经定义的指针
4. 指针的初始化
int *p = NULL;
NULL:空指针(指向内存地址为0x0的指针,类似于整形变量的初始化0值)
5. 指针的算数运算(int *p = NULL)
+ p+1 (p指针向内存高地址偏移4个字节空间)
- p-1 (p指针向内存低地址偏移4个字节空间)
两个相同类型的指针相减:获得两个地址中间相差了多少个该类型的元素
++ 向内存高地址偏移指向数据类型大小个字节空间
-- 向内存高地址偏移指向数据类型大小个字节空间
6. 指针常见操作
1.指针变量本身,也就是p,修改p的值可以改变指针变量的指向
2.指针变量指向的空间,也就是*p,修改*p的值并不能改变指针变量的指向,只是利用指针修改对应空间中的值
7. 指针作为函数参数(地址传递)
注意:
1. 函数传参分为值传递和地址传递
2. 函数体内想修改函数体外的值用地址传递
8. 指针和数组的关系
8.1 指针和一维数组的关系
int a[32];
int *p = &a[0];
1. 数组名是指向数组第一个元素的指针
a == &a[0]
2. 访问数组下标为n的元素
a[n] == *(a + n) == p[n] == *(p + n)
一般形式: 指针[偏移量] == *(指针 + 偏移量)
注意:p为指针变量,能够进行++操作,允许p++
a为数组的首地址常量,不能进行++操作,不允许a++
9. 指针作为函数参数
int a[5] = {1, 2, 3, 4, 5};
第一种:
int fun(int array[], int len); 其中array[]的 [] 可以为任意值文章来源:https://www.toymoban.com/news/detail-859551.html
第二种:
int fun(int *parray, int len);
文章来源地址https://www.toymoban.com/news/detail-859551.html
到了这里,关于嵌入式学习——C语言基础——day10的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!