- 博客(15)
- 收藏
- 关注
原创 对于用户定义类型,typedef和#define 的区别
其中,“生成基本类型的东西”——声明符——或者是一个简单标识符,或者是如同*p、a[10]、或f()这样的符号,表明被声明的变量是指向基本类型的指针、基本类型的数组或者返回基本类型的函数(当然,更加复杂的声明符也可以这样组成)。#define只是对String_d进行一次替换,指针声明中的*号并不是基本类型的一部分,它只是包含被声明标识符的声明符(declarator)的一部分。另一方面,typedef具有遵守作用域规则的特点(也是就说,它可以在一个函数或块内声明)。这可能并非原来所希望的。
2024-05-08 18:46:25
159
1
原创 段错误以及出现段错误的原因
当发生段错误时,操作系统会终止程序的执行,以防止进一步的错误和潜在的系统不稳定。段错误是指程序在执行过程中尝试访问不合法的内存地址,从而导致的错误。
2024-04-19 15:31:46
178
原创 关键字volatile
例如,在 STM32 中,中断服务程序(Interrupt Service Routine,ISR)可能会更改全局变量的值。如果编译器对全局变量进行了优化,那么在 ISR 中更改变量的值可能不会立即反映到其他代码中,从而导致错误的结果。当编译器优化代码时,它可能会尝试对变量进行缓存或重排序,以提高代码的执行效率。但是,如果变量的值可能会被硬件或软件更改,那么编译器的优化可能会导致错误的结果。关键字可以告诉编译器不要对变量进行优化,以确保变量的值总是从内存中读取。,以确保变量的值总是从内存中读取。
2024-04-19 15:29:01
191
原创 我该如何决定使用那种数据类型?
否则,如果空间很重要(例如有很大的数组或很多的结构),就使用short型。如果定义明确的溢出特征很重要而负值无关紧要,或者希望在操作二进制位和字节时避免符号扩展的问题,请使用对应的unsigned类型。编译器需要生成额外的代码来进行char型和int型之间的转换(导致目标代码量增大),而且不可预知的符号扩展也会带来一堆麻烦(使用unsigned char 会有所帮助。如果因为某种原因需要声明一个有精确大小的变量,确保像C99的那样用某种适当的typedef封装这种选择。
2024-04-16 11:05:43
586
原创 stm32编程中为什么要给变量起别名
需要注意的是,变量起别名应该遵循一定的规范,避免使用过长或过复杂的别名,以免影响代码的可读性。同时,应该尽量避免使用与系统关键字或保留字相同的别名,以免引起不必要的麻烦。
2024-04-14 10:35:52
118
1
原创 什么是C语言中的动态内存分配,以及如何使用malloc()和free()函数
需要注意的是,我们不能对一个未通过malloc()等函数分配的内存空间调用free()函数。在C语言中,我们通常使用malloc()、calloc()和realloc()函数来动态分配内存,而使用free()函数来释放已分配的内存。注意,我们需要在malloc()函数的返回值上进行强制类型转换,将其转换为适当的指针类型。malloc()函数返回一个指向被分配的内存空间的指针,如果分配失败,则返回NULL。注意,释放后的指针不能再次使用,除非再次通过malloc()等函数进行分配。
2024-04-12 22:43:08
361
原创 为什么线性表的内存是动态分配的
在 C 语言中,线性表的内存是动态分配的,这是因为线性表的大小可能会随着数据的添加和删除而变化。如果使用固定大小的数组来存储线性表,那么当线性表的大小超过数组的大小时,就需要重新分配更大的数组,这会导致数据的复制和内存的浪费。而使用动态内存分配,可以根据需要动态地分配内存,从而避免了数据的复制和内存的浪费。在 C 语言中,可以使用。函数来动态分配内存,使用。
2024-04-08 06:49:41
117
原创 对线性表进行操作时,为什么传入的参数为线性表的指针
总之,使用指针来操作线性表是因为线性表是动态分配的,我们需要通过指针来访问和修改线性表的元素。但是,由于动态内存分配是在堆上进行的,而不是在栈上进行的,因此我们无法直接访问线性表的元素。我们需要使用指针来访问线性表的元素。例如,如果我们要在线性表的开头插入一个元素,我们可以使用。这是因为线性表是动态分配的,我们需要通过指针来访问和修改线性表的元素。这样做的好处是我们可以根据需要动态地调整线性表的大小,而不需要在一开始就确定线性表的大小。来将线性表的指针指向新插入的元素。是访问指针指向的元素的操作符,
2024-04-08 06:49:03
134
原创 C语言中原码、反码补码的意义
原码是一个数的直接二进制表示。对于正数,原码与该数的二进制表示相同;对于负数,原码的最高位为 1,其余位为该数的绝对值的二进制表示。补码的特性使得加法运算可以通过简单的二进制相加来完成,而不需要考虑符号。:反码是在原码的基础上,对于正数,反码与原码相同;对于负数,反码是将原码的各位取反。:补码是在反码的基础上,对于正数,补码与原码相同;对于负数,补码是将反码加 1。:在处理多字节整数时,补码可以用于进行符号扩展,确保多字节数的正确符号处理。:使用补码可以方便地表示负数,使得负数可以与正数进行相同的运算。
2024-04-07 16:49:39
617
2
原创 什么是接口
接口可以是物理的,例如 USB 接口、HDMI 接口等,也可以是逻辑的,例如 API(Application Programming Interface)应用程序编程接口。在计算机软件中,接口是一组定义的函数、方法或属性,用于与其他软件组件进行交互。应用程序也可以定义自己的接口,以便其他应用程序可以与其进行交互。在计算机硬件中,接口是连接不同设备的物理连接器,例如键盘、鼠标、显示器等。总之,接口是计算机系统中不同组件之间进行通信和交互的重要手段。
2024-04-07 16:01:00
196
原创 linux中apt工作原理
当用户使用 Apt 安装或升级软件包时,Apt 会从远程软件包仓库(通常是 Debian 的官方软件包仓库)下载软件包的清单和依赖关系信息,并根据这些信息自动下载和安装所需的软件包。如果软件包的依赖关系不满足,Apt 会自动下载和安装所需的依赖包。Apt 还可以自动处理软件包的升级和安全更新。如果用户同意升级,Apt 会自动下载和安装新版本的软件包,并自动处理依赖关系和配置文件的更新。总的来说,Apt 是一个非常方便和强大的包管理工具,它可以帮助用户轻松地管理系统中的软件包,提高系统的安全性和稳定性。
2024-04-07 15:59:17
407
原创 linux中pstree命令的用法及作用
命令,你可以更好地了解系统中正在运行的进程之间的关系,以及它们所属的用户和进程 ID。这对于系统管理和故障排除非常有用。命令用于以树状图的形式显示进程之间的关系。它显示了进程的父子关系,以及进程所属的用户和进程 ID(PID)。在 Linux 中,
2024-04-07 15:58:42
530
原创 linux中proc文件夹的作用
文件夹是一个虚拟文件系统,它提供了一个接口,用于访问和查看系统内核和进程的信息。它是一个动态的文件系统,其中的文件和目录随着系统的运行而不断变化。文件夹是一个非常重要的文件系统,它提供了一个接口,用于访问和查看系统内核和进程的信息。它对于系统管理和调试非常有用。文件夹中的文件和目录通常以数字命名,这些数字对应着系统中的进程 ID(PID)。每个进程都有一个对应的。文件夹,其中包含了该进程的信息和控制接口。
2024-04-07 15:58:00
364
原创 linux中kill命令使用
命令用于终止一个或多个进程。它可以通过进程 ID(PID)、进程名称或信号来终止进程。命令只能终止属于当前用户的进程。如果需要终止其他用户的进程,需要使用。命令或者具有管理员权限的用户身份来运行。在 Linux 中,
2024-04-07 15:52:41
429
空空如也
C语言指向数组的指针偏移问题
2024-04-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人