嵌入式Linux C(五)——指针

简介: 嵌入式Linux C(五)——指针

学习内容


指针的作用

*与&

多级指针

野指针

字符串


一、指针(深入浅出指针)


谈谈你对指针的理解? (指针是什么)

语法:指针是一种数据类型,它可以定义变量,变量保存的值是地址,由于地址是固定长度,所以指针变量的长度是固定长度;不同地址的步长不一样,需要不同指针类型的变量来保存;

作用:由于指针变量可以保存地址,所以可以直接操作地址,也就是可以操作硬件的寄存器地址,从而实现直接访问硬件;

支持的运算符:*:间接运算符, &:取地址运算符(对应内存空间和指向内存空间)

0a2653c851af460fa595bd959398a8f1.png

num:整型变量

p:整型指针变量

*p:先取出p对应内存空间保存的地址,根据这个地址找到该地址对应的内存空间,取出这个内存空间的值;

p变量保存的是num的对应空间的地址;

所以:

num对应的内存空间就是p指向的内存空间

*p:取p指向空间的内存空间的值

p:p对应内存空间的值

(*p)++:对p指向的空间的值+1;

p++:对p对应空间的值加1;(int步长为4)

p == &num == 0x1000

*p == num == 5

*(&num) = 5


从右往左看

int * p//整型指针变量:p是一个变量,保存的是地址,该地址是整型类型

char * p2//字符指针变量:p2是一个变量,保存的是地址,该地址是字符类型的地址


问题:为什么地址分为不同类型?–》不同类型的指针变量保存不同步长的地址

地址属性:步长(做加1操作所移动的字节数)地址 + 操作数 - 地址 eg.0x00000001 + 1 = ????


二、多级指针


多级指针:保存上一级指针变量的地址;(远指针(巨指针),近指针)

提出问题:&p 如何保存?

int **pp://整型指针的指针变量:pp是一个变量,保存的是地址,该地址对应的内存空间保存的还是地址,这个地址是整型地址

pp的字节长度:32:4 64:8


pp == &p ==0x2000
*pp == p == 0x1000 = &num
**pp == *p == num
//类推


(场景应用:函数传参)


//例
void func(char **ptr)
{
  (*ptr)++;
}
int main()
{
  char *ptr = "hello world";
  func(*ptr);
  printf("ptr = %s\n",ptr);
  return 0;
}


三、指针运算、万能指针


指针之间的运算:

赋值:指针之间赋值(相同类型指针之间赋值):

短指针赋值给长指针:多取数据

长指针赋值给短指针:丢数据

同级指针相互赋值

注:void *:万能指针:可以接受任何类型指针的值

运算+:p + 操作数 指针 + 指针

运算-:p - 操作数 指针 - 指针:相差数据类型的个数



p指针的位置是存储在栈空间的,而指针p指向的空间是在堆上的


疑问及解决


问题1,对printf各种%的理解

网址:C 库函数 - printf()


编程练习


题目:一个字符串中连续最长数字字符串的个数并输出


相关文章
|
23天前
|
JSON 机器人 Linux
推荐一款嵌入式Linux开源框架与封装-cpp-tbox
推荐一款嵌入式Linux开源框架与封装-cpp-tbox
54 3
|
1月前
|
Linux 开发工具 git
Linux嵌入式系统中如何使用U-Boot实例
Linux嵌入式系统中如何使用U-Boot实例
26 0
|
1月前
|
Linux Android开发
嵌入式linux中Framebuffer 驱动程序框架分析
嵌入式linux中Framebuffer 驱动程序框架分析
27 0
|
1月前
|
编译器 C语言
嵌入式C语言变量、数组、指针初始化的多种操作
嵌入式C语言变量、数组、指针初始化的多种操作
32 0
|
1月前
|
Linux C语言 SoC
嵌入式linux总线设备驱动模型分析
嵌入式linux总线设备驱动模型分析
32 1
|
11天前
|
Linux 编译器 测试技术
嵌入式 Linux 下的 LVGL 移植
嵌入式 Linux 下的 LVGL 移植
|
24天前
|
Linux
嵌入式Linux系统(NUC980)tf卡出错处理errors=remount-ro改为errors=continue
嵌入式Linux系统(NUC980)tf卡出错处理errors=remount-ro改为errors=continue
7 1
|
24天前
|
安全 Linux
嵌入式Linux系统关闭串口调试信息的输出
嵌入式Linux系统关闭串口调试信息的输出
17 1
|
24天前
|
Linux 编译器 网络安全
嵌入式Linux移植dropbear
嵌入式Linux移植dropbear
19 3
|
24天前
|
存储 Ubuntu Linux
制作一个嵌入式Linux的应用程序升级文件
制作一个嵌入式Linux的应用程序升级文件
12 2