嵌入式C语言--基础知识

嵌入式C语言–基础知识

嵌入式C语言--基础知识

  • 嵌入式C语言--基础知识
    • 一. 含参数的宏与函数的不同点
      • 1)函数
      • 2)宏
    • 二. scanf格式化输入的注意事项
    • 三. 指针
      • 1)指针变量(地址变量)
      • 2)指针常见含义
    • 四. 数组
    • 五. 数组与指针的区别
    • 六. sizeof关键字
    • 七. sizeof关键字与strlen函数的区别
    • 八. strcpy和memcpy区别
      • 1.复制的内容不同
      • 2.复制的方法不同
      • 3.用途不同
    • 九. 大小端模式
    • 十. extern与static区别
      • 1)static
      • 2)extern

一. 含参数的宏与函数的不同点

1)函数

函数调用时,先求出实参表达式的值,然后带入形参。
函数调用是在程序运行时进行的,分配临时的内存单元;
对函数中的实参和形参都要定义类型,二者的类型数量要求一致;
调用函数只可得到一个返回值;
函数调用不使源程序变长;
函数调用占运行时间(分配单元、保留现场、值传递、返回);

2)宏

使用带参的宏只是进行简单的字符替换。
宏替换则是在预编译时进行的,在展开时不分配内存单元,不进行值的传递处理,也没有“返回值”的概念。
宏没有类型检查,宏名无类型,它的参数也无类型,只是一个符号代表,展开时带入指定的字符即可。
调用宏之后可以得到多个结果;
使用宏时,宏替换后源程序增长;
宏替换不占运行时间,只占编译时间;

二. scanf格式化输入的注意事项

输入数据时采用的分隔符应与格式控制中的分隔符一致;
输入数据时可指定宽度,但不可规定精度;输入格式符带有*,表示该数据不赋值
无符号数可用%d、%o、%x格式输入;
用c格式输入字符时,空格、转义字符均为有效字符;
遇空格、回车、Tab键,遇宽度以及非法输入可认为数据输入结束;

三. 指针

英文名pointer,也叫地址,就是内存块的首地址

1)指针变量(地址变量)

指针变量就是存放指针数据的变量
int*p;//p只能存放int类型内存块的地址
所有指针变量都是4字节(32环境)
未赋初值的指针变量禁止使用(访问未初始化的指针的值程序直接崩溃。访问NULL指针的值也会奔溃)

2)指针常见含义

*p的含义:
根据p里面的地址,找对应类型的内存块。
p+n的含义:
• p地址向后偏移n个存储单元,得到一个新地址(在一连续空间中俩个指针相减等于间隔的内存空间个数)
p[n]的含义:
• 表示p地址第n+1个内存块
指针支持的运算有算术运算、自增自减、关系运算、逻辑运算、赋值运算、条件运算(三目)、逗号运算、sizeof关键字、& *

四. 数组

1、数目固定,类型相同,连续存放的一组有序数的集合;
2、C语言规定,数组名就是内存块的首地址,它是一个常量指针;
3、定义数组时,长度应是常量或常量表达式,不能用变量,而在使用时,a[ i ]表示a之后第i+1个内存块;
4、a + n表示a地址后向右偏移n个储存单元得到新的地址,a[ n ]表示a地址后第n + 1个内存块;
5、数组中每个元素都是变量;
6、int a[ 10 ]={1, 2, 3};部分元素赋初值,其余未赋值为0; int a[ 10 ];一个值都不赋,数组元素均为乱值。

五. 数组与指针的区别

数组是一种数据结构,数组名是该数组的首地址,而指针是一个地址。
sizeof测量数组即为所占内存空间的大小
sizeof测量指针在win32为四字节,win64为八字节

六. sizeof关键字

sizeof作用:能测试常量,变量,数组、类型 所占 应占 内存大小的单位字节数
测试字符串 就是字符个数 + 1
printf(“%d”, sizeof(“lovechina”)); 有\0
测试变量 就是变量对照类型分配的空间大小测试数组 就是数组所占的空间大小,元素占的空间 * 数组长度
所有指针变量 所占4字节(32 系统)

七. sizeof关键字与strlen函数的区别

Sizeof:编译器在编译时就计算出了sizeof的结果,而strlen函数必须在运行时才能计算出来。并且sizeof计算的是数据类型占内存的大小,而strlen计算的是字符串实际的长度strlen只能测量字符串 计算字符串 str 的长度,直到空结束字符,但不包括空结束字符

八. strcpy和memcpy区别

1.复制的内容不同

strcpy只能复制字符串,
memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。

2.复制的方法不同

strcpy不需要指定长度,它遇到被复制字符的串结束符"¥0"才结束,如果空间不够,就会引起踩内存。
memcpy则是根据其第3个参数决定复制的长度。

3.用途不同

通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy,由于字符串是以“¥0”结尾的,所以对于在数据中包含“¥0”的数据只能用memcpy。

九. 大小端模式

大端模式:是指数据的高字节保存在内存的低地址中;
小端模式:是指数据的高字节保存在内存的高地址中
有两种方法来获得大小端的信息。一种是指针强转来实现;也可以使用共同体来获得这个信息。

int check _ sys()
{int a =1;char * p =( char *)& a ;return * p ;//0﹣大端 1小端
}int check_sy ()
{union Un{char c ;int i ;
};union Un u ={0};u.i =1;//如果是小端存储,就会把 c 也修改 return u.i;//0﹣大端  1﹣小端
}

十. extern与static区别

1)static

作用于局部变量时: 叫静态局部变量,在函数调用时,只有在该函数第一次调用时才对其分配空间和初始化。在函数调用结束时,不对该变量的内存进行释放,值仍然保留。这也是于自动变量的区别。
作用于全局变量时: 叫静态全局变量。表示该变量是私有的,只能在该文件使用。不能通过extern关键字对其引用。
作用于函数时: 叫静态函数,表示该函数是私有的,只能在本文件中使用,不能通过extern关键字对其引用

2)extern

本文件: 定义在本文件下面的全局变量,想要在上面使用时需要使用extern关键字对其声明
其他文件:定义在其他文件的全局变量想要在本文件使用时,若该变量未被static修饰时可通过extern关键字在本文件对其声明。即可使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/842062.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解读 Nginx:构建高效反向代理和负载均衡的秘密

解读 Nginx:构建高效反向代理和负载均衡的秘密 一、简介 Nginx (Engine-X) 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。Nginx 以其高并发、高可靠性、低内存消耗等特点,成为了众多互联网公司首选的服务器软…

通用代码生成器应用场景三,遗留项目反向工程

通用代码生成器应用场景三,遗留项目反向工程 如果您有一个遗留项目,要重新开发,或者源代码遗失,或者需要重新开发,但是希望复用原来的数据,并加快开发。 如果您的项目是通用代码生成器生成的,…

在智慧城市建设中,大数据发挥着怎样的关键作用?

在智慧城市建设中,大数据发挥着以下关键作用: 数据采集与监测:大数据技术能够帮助城市采集和监测各种数据,包括气象、环境、交通、能源等方面的数据。这些数据可以用来分析和预测城市的运行情况,并为城市的各个部门提供…

阿里云产品DTU评测报告(二)

阿里云产品DTU评测报告(二) 问题回顾问题处理继续执行 问题回顾 基于上一次DTU评测,在评测过程中遇到了windows系统情况下执行amp命令失败的情况,失败情况如图 导致后续命令无法执行,一时之间不知如何处理&#xff0…

20 道大模型面试问题(含答案)

大型语言模型在生成式人工智能(GenAI)和人工智能(AI)中正变得越来越有价值。这些复杂的算法增强了人类的能力,并在各个领域促进了效率和创造力。 节前,我们组织了一场算法岗技术&面试讨论会&#xff0…

python 两个表格字段列名称值,对比字段差异

支持xlsx,xls文件,相互对比字段列 输出两个表格文件相同字段,置底色为绿色 存在差异的不同字段,输出两个新的表格文件,差异字段,置底色为红色 注意点:读取的文件仅支持xlsx格式,头列需要删除…

【AD21】Gerber文件的输出

Gerber文件是对接生产的文件,该文件包含了PCB的所有层的信息,如铜层、焊盘、丝印层、阻焊层等。板厂使用这些文件来准备生产工艺。虽然可以将PCB发给板厂去打板,但是对于公司而言,直接发PCB会有泄密风险,Gerber文件会相…

《宝贵的人生建议》

致读者 2024/05/25 发表想法 简练表达,发散(灵活)运用。 原文:在写作过程中,我的主要精力是用在这个方面:把这些重要的经验教训浓缩为尽可能紧凑简炼、易于传播的语言。我鼓励读者在阅读时扩展这些“种子”…

不能错过的AI知识学习神器「Mo卡片」

1. 「Mo卡片」——知识点的另一种承载方式 1.1 产品特点 📱一款专为渴望理解和掌握人工智能知识的小伙伴量身打造的轻量级 App。 🏷AI 知识卡片集 Mo卡片内置了 26 套卡片集,总计 1387 张卡片,每张卡片都能获得 1 个核心知识。…

GpuMall智算云:AUTOMATIC1111/stable-diffusion-webui/stable-diffusion-webui-v1.8.0

配置环境介绍 目前平台集成了 Stable Diffusion WebUI 的官方镜像,该镜像中整合如下资源: GpuMall智算云 | 省钱、好用、弹性。租GPU就上GpuMall,面向AI开发者的GPU云平台 Stable Diffusion WebUI版本:v1.8.0 Python版本:3.10.…

nginx与nginx-rtmp-module安装

nginx与nginx-rtmp-module安装 画了好几天图,实在有些乏力,找点有意思的事情做做 觉得视频流传输挺有意思,B站找了些视频,但感觉有些大同小异,讲得不是很清楚 FFmpeg/RTMP/webRTC丨90分钟搞定直播逻辑-推流-流媒体服…

半年不在csdn写博客,总结一下这半年的学习经历,coderfun的一些碎碎念.

前言 自从自己建站一来,就不在csdn写博客了,但是后来自己的网站因为资金问题不能继续维护下去,所以便放弃了自建博客网站来写博客,等到以后找到稳定,打算满意的工作再来做自己的博客网站。此篇博客用来记录自己在csdn…

如何使用Go语言编写RESTful API?

在当今的软件开发中,RESTful API的使用变得日益重要。它们提供了跨平台、跨语言的通信方式,使得不同的服务能够无缝地集成在一起。Go语言作为一种高效且简洁的编程语言,非常适合用于编写RESTful API。本文将向你展示如何使用Go语言编写RESTfu…

Git Large File Storage (LFS) 的安装与使用

Git Large File Storage [LFS] 的安装与使用 1. An open source Git extension for versioning large files2. Installing on Linux using packagecloud3. Getting Started4. Error: Failed to call git rev-parse --git-dir: exit status 128References 1. An open source Git…

HLS流在部分安卓机型无法播放问题的排查

问题描述 最近上线了一个数字人系统,客户端通过HLS实时拉流进行播放来提升用户体验(视频推理后再进行播放的延时不可接受)。通过一段时间的使用,反馈有部分Android机型无法正常播放视频。 问题排查 因为上线之前做过测试,在VLC播放器, iOS…

Android Studio 获取 SHA1

以 debug.keystore 调试密钥库为例。 步骤1:明确 debug.keystore 位置 debug.keystore 在 .android 目录下: Windows 用户:C:\Users\用户名\.android\debug.keystore Mac 用户:/Users/用户名/.android/debug.keystore 假设我的…

【云原生】用 Helm 来简化 K8s 应用管理

用 Helm 来简化 K8s 应用管理 1.诞生背景2.主要功能3.相关概念4.工作原理5.架构演变6.Helm 常用命令7.推荐仓库8.Charts8.1 目录结构8.2 构建一个无状态应用模版 charts Helm 对于 Kubernetes 来说就相当于 Yum 对于 Centos 来说,如果没有 Yum 的话,我们…

旅游推荐管理系统

代码位置:旅游管理系统: 根据若依模版的一个旅游管理系统 - Gitee.com 分支dev 项目介绍 项目目的 随着社会的高速发展,人们生活水平的不断提高,以及工作节奏的加快,旅游逐渐成为一个热门的话题,因为其形式的多样,涉…

html中元素显示模式

一:元素显示模式是什么 元素显示模式指元素在文件中以什么样的方式显示 二:具体分类及作用 1 块元素 块元素的特征: 独占一行可以设置宽、高、内外边距宽度默认为容器(父级盒子)的100%块元素是一个容器或盒子,可以放其他块元素或行内元素注意事项: 常见的块级元素<…