3.9开工第一天,调整好状态迎接新学期.
在寒假发现如果真要做软件,不止知道更要会用,所以之后会提升自己代码量,尽量把学到的知识融入代码里。
知识点
数组指针和指针数组有什么区别?
指针数组:本质是数组,数组里的每个元素都是指针地址
数组指针:本质是指针,这个指针专门用来指向一个数组保存数组的首地址
笔试用指针数组存储 3 个整数的地址,遍历输出每个整数的值
#include <stdio.h>
int main() {
int num1 = 10, num2 = 20, num3 = 30;
int *p_arr[3] = {&num1, &num2, &num3};
for (int i = 0; i < 3; i++) {
printf("p_arr[%d] 指向的值:%d\n", i, *p_arr[i]);
}
return 0;
}
用数组指针指向一个 int 数组,通过指针输出数组的所有元素
#include <stdio.h>
int main() {
int arr[3] = {100, 200, 300};
int (*arr_ptr)[3] = &arr;
for (int i = 0; i < 3; i++) {
printf("数组元素[%d]:%d\n", i, (*arr_ptr)[i]);
}
return 0;
}
函数指针和指针函数有什么区别?
指针函数:本质是函数,这个函数的返回值是一个指针地址
函数指针:本质是指针,这个指针专门用来指向一个函数保存函数的入口地址
可以看出和数组大同小异
指针函数就不多说,只是函数返回的是地址如
int *function()
{
static int a = 10;
return &a;
}
用static是防止函数执行完销毁变量
函数指针有点类似于C++里的多态,可以控制执行哪个函数
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int main() {
int (*func_ptr)(int, int) = add;
printf("调用结果1:%d\n", func_ptr(3, 5)); // 输出8
printf("调用结果2:%d\n", (*func_ptr)(3, 5));// 输出8
return 0;
}
数组名和指针的区别与联系是什么?
数据保存方面,数组保存的是数据,指针保存的是地址。数据访问数组访问是直接访问,指针是间接访问。指针多用于动态数据结构动态内存开辟。数据多用于存储统一的数据结构线性表等等
常量指针、指向常量的指针、指向常量的常量指针有什么区别?
常量+指针(const + *)也就是int const *p
不能通过指针来修改值
指针+常量(*+const)也就是int *const p
不能改变指针的指向,但是存储的值可以修改
指针和引用的异同是什么?如何相互转换?
指针是存储地址的独立变量,可空、可声明后赋值、能重绑定指向不同变量,支持多级指针;引用是变量别名,无独立内存,必须声明时绑定有效变量,不可空、不可重绑定,无多级引用。
什么是串口,RS232,RS485
串口通信使用TTl电平来发送数据,但是缺点明显,传输距离短,看抗干扰能力弱,等问题,于是出现RS232,用+12V和-12V来表示0或1,抗干扰能力变强传输距离也增加了但是12V来回切换,对元器件不友好,于是出现RS485,使用差分来表示0/1,不仅传输距离增加抗干扰能力强,usb数据线就是使用差分信号
这月计划
基础知识点还是继续积累
巩固驱动代码
(之前使用imx6ull开发版是跟着视频来写驱动代码,现在只记得零零散散的碎片。这次的rk3588没有教学视频,想通过rk3588手册和文档上来学习驱动代码,实现LED,按键,中断,pwm,iic,usb等常见外设)