C/C++|物联网开发入门+项目实战|空间读写|非字符空间|返回值内部实现|嵌入式C语言高级|C语言函数的使用(2)-学习笔记(12)

这篇具有很好参考价值的文章主要介绍了C/C++|物联网开发入门+项目实战|空间读写|非字符空间|返回值内部实现|嵌入式C语言高级|C语言函数的使用(2)-学习笔记(12)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


参考: 麦子学院-嵌入式C语言高级-C语言函数的使用

空间的读写

void fun(char *p);
const char *p 只读空间,只为了看
char *p;该空间可能修改,几乎都要变

strcpy();
定义:char *strcpy(char *dest,const char *src);

sprintf();

作用

1、修改 int * short * long *
2、空间传递
2.1 子函数看看空间里的情况 const *
2.2 子函数反向修改上层空间里的内容 char * void * 都代表反向修改
void fun(const int *p) //第一反应仅是上层对下层的查看功能

字符空间:空间首地址,结束标志的不同
结束标志:内存里面存放了0x00(1B),字符空间
非字符空间0x00,不能认为是结束。
void fun(char *p)
{
int i = 0;
p[i]++;
while(p[i]){
p[i]操作 p[i] = x; a = p[i] + -
i++;
}
}

实现strlen

int strlen(const char *p){
/错误处理,判断输入参数是否合法?/
if(p==NULL){
//return…
}
/内存处理,从头到尾逐一处理,遍历/
while(p[i]){
//;
i++;
}
}

实现strcpy

void strcpy(char *dest,const char *src);

“”===>初始化const char*
char buf[10]—>初始化 char *

非字符空间

unsigned char *p;
结束标志:数量(个数)B字节
int *p unsigned char *p
short *p struct abc *p
void * :数据空间的标志
大小

void fun(unsigned char *p,int len)
{
    int i;
    for(i=0;i<len;i++)
        p[i];
        a = p[i] //++++++++++
}
int main()
{
    struct bensor_data buf;

    fun(&buf,sizeof(buf)*1);

}

memcpy函数
void *memcpy (void *dest, const void *src,size_t n);
recv函数:
ssize_t recv(int sockfd,void *buf, size_t len, int flags);
send函数
ssize_t send(int sockfd, const * void xuf, size_t len, int flaqs);

void*

int fun(void *buf,int len)
{
unsigned char *tmp = (unsigned char *)buf;
tmp[i] i++ len
}

返回值

提供启下功能的一种表现形式
基本语法
返回值或者输入地址的传递达到返回信息的目的
返回类型 函数名称(输入列表)
{
return
}
调用者
a = fun(); //生命周期很短
被调者:
int fun()
{
return num;
}

拷贝
示例:

#include <stdio.h>

int fun(void)
{
    return 0x123;
}


int main()
{
    int ret;

    ret = fun(); //拷贝给ret

    printf("the ret is %x\n",ret);
    return 0;
};
// E:\temp>cd "e:\temp\" && gcc 2.c -o 2 && "e:\temp\"2
// the ret is 123
//如果函数定义改为char ,则只返回8位
// E:\temp>cd "e:\temp\" && gcc 2.c -o 2 && "e:\temp\"2
// the ret is 123

返回基木数据类型
基本数据:int char
指针类型: 空间,不能是数组
int fun(void)
{
return
}

struct abc fun(void); //工程中不建议使用,冗余度太高,应该用连续空间

int fun1(void); int a; a = fun1(); //定义一个一模一样的类型接收就可以

void fun2(int *p); int a = 0; fun2(&a);a //通过输入参数承上启下,传递一个int类型的地址给输入参数,才能够上层对下层进行修改

int fun(int *); //承上启下的功能可以实现2个

int *fun1(void);
int main()
{
int *p;
p = fun1();
}

void fun2(int **p) //变向指向一个地址
int main()
{
int *p;
fun2(&p);
p;
}

返回连续空间类型

return a[10];
指针作为空间返回的唯一数据类型
int *fun();
地址:指向的合法性,作为函数的设计者,必须保证函数返回的地址所指向的空间是合法的,不能是局部变量。

示例:
#include <stdio.h>

char  *fun(void)
{
   char buf[] = "hello world!"; //buf为fun所管理的局部变量

   return buf; //return后buf就回收了
}


int main()
{
    char *p;

    p = fun();
    printf("the p is %s\n",p);
    return 0;
};
// E:\temp>cd "e:\temp\" && gcc 2.c -o 2 && "e:\temp\"2
// 2.c: In function 'fun':
// 2.c:7:4: warning: function returns address of local variable [enabled by default]
// the p is `#?
//如果改成常量:
char  *fun(void)
{
   //char buf[] = "hello world!"; //buf为fun所管理的局部变量

   return "hello world"; //常量区是固定的,不会回收
}
//可以正常打印
// E:\temp>cd "e:\temp\" && gcc 2.c -o 2 && "e:\temp\"2
// the p is hello world

使用者:
int *fun();
int *p = fun(); //只接收程序地址就可以,定义一个一样的接收即可。

函数内部实现

基本数据类型 fun(void)
{
基本数据类型 ret;
xxxx;
ret = xxxx;
return ret;
}

int fun()
{
int ret = =;
count ++;
ret = xxx;
return ret;
}

地址类型相对复杂:
char *fun()
{
char *s = NULL;
char buf[];
return buf;

}
1.静态区,函数生命周期内
char *fun(void)
{
static char buf[] = “hello world!”; //static以后认为是在静态区,数据段中

return buf;
}
2.只读区,工程上意义不大,可忽略,
char *fun(void)
{
//char buf[] = “hello world!”; //buf为fun所管理的局部变量

return “hello world”; //常量区是固定的,不会回收
}
3.堆区:malloc函数和free函数

示例:
#include <stdio.h>

char  *fun(void)
{
   //static char buf[] = "hello world!"; //static以后认为是在静态区,数据段中
   char *s = (char *)malloc(100); //申请
   strcpy(s,"hello world"); //初始化
   return s;
}


int main()
{
    char *p;

    p = fun();
    printf("the p is %s\n",p);

    free(p); //释放
    return 0;
};
// E:\temp>cd "e:\temp\" && gcc 2.c -o 2 && "e:\temp\"2
// 2.c: In function 'fun':
// 2.c:6:22: warning: incompatible implicit declaration of built-in function 'malloc' [enabled by default]
// 2.c:7:4: warning: incompatible implicit declaration of built-in function 'strcpy' [enabled by default]
// 2.c: In function 'main':
// 2.c:19:5: warning: incompatible implicit declaration of built-in function 'free' [enabled by default]
// the p is hello world
//man malloc 打开手册,会告知你该引用哪个头文件
// 增加:(警告消失)
// #include <string.h>
// #include <stdlib.h>

man fopen
FILE *fopen (constchar *path,const char *mode) ;
返回值指向堆区或者静态区,返回的FILE不是标准类型,具体看说明,但如果是堆区,必须使用后free。
C/C++|物联网开发入门+项目实战|空间读写|非字符空间|返回值内部实现|嵌入式C语言高级|C语言函数的使用(2)-学习笔记(12)文章来源地址https://www.toymoban.com/news/detail-420974.html

到了这里,关于C/C++|物联网开发入门+项目实战|空间读写|非字符空间|返回值内部实现|嵌入式C语言高级|C语言函数的使用(2)-学习笔记(12)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于python的EC800物联网mqtt协议开发指南:从入门到实战(1)

    由于工作需要,开启了一个物联网开发的小项目,4G模块是EC800M,由于本人也是从0开始接触物联网开发,所以将会把整个系统的搭建流程分享出来供大家参考,有合作意向的同仁们也可以随时私信我。 1. 开发板           EC800的开发板,网上几十块钱一个,淘宝直接搜索

    2024年04月10日
    浏览(42)
  • STM32基于CubeIDE和HAL库 基础入门学习笔记:物联网项目开发流程和思路

    文章目录: 第一部分:项目开始前的计划与准备 1.项目策划和开发规范  1.1 项目要求文档 1.2 技术实现文档 1.3 开发规范 2.创建项目工程与日志 第二部分:调通硬件电路与驱动程序 第三部分:编写最基础的应用程序 第四部分:完成最终要求、反复调试 第五部分:程序优化、

    2024年02月13日
    浏览(48)
  • CMake入门教程【实战篇】使用开源库cmake-modules简化项目开发与维护

    本教程介绍了rpavlik/cmake-modules,一个CMake模块集合,旨在简化和优化CMakeLists.txt文件的编写和维护工作。该集合尤其对虚拟现实和物理模拟包的开发者有用,同时也包含通用实用模块和针对旧版CMake的补丁或解决方案。 项目托管在GitHub上,可通过链接访问:rpavlik/cmake-modules 查

    2024年01月15日
    浏览(45)
  • Python入门教程:掌握for循环、while循环、字符串操作、文件读写与异常处理等基础知识

    在 Python 中,for 循环用于遍历序列(list、tuple、range 对象等)或其他可迭代对象。for 循环的基本语法如下: 其中, 变量 表示每次循环中取出的一个元素, 可迭代对象 表示被遍历的对象。下面是一个 for 循环的例子: 输出结果为: 代码中, fruits 是一个列表, fruit 是当前循

    2024年02月10日
    浏览(57)
  • opencv实战项目 实现手势跟踪并返回位置信息(封装调用)

     OpenCV 是一个基于 Apache2.0 许可(开源)发行的跨平台计算机视觉和机器学习 软件库 ,可以运行在Linux、Windows、Android和Mac OS操作系统上。 需要提前准备opencv 和 mediapipe库   pip --default-timeout=5000 install -i https://pypi.tuna.tsinghua.edu.cn/simple mediapipe 接着上一章的内容,这一次我们加

    2024年02月13日
    浏览(30)
  • 《黑马程序员2023新版黑马程序员大数据入门到实战教程,大数据开发必会的Hadoop、Hive,云平台实战项目》学习笔记总目录

    本文是对《黑马程序员新版大数据入门到实战教程》所有知识点的笔记进行总结分类。 学习视频:黑马程序员新版大数据 学习时总结的学习笔记以及思维导图会在后续更新,请敬请期待。 前言:配置三台虚拟机,为集群做准备(该篇章请到原视频进行观看,不在文章内详细

    2024年02月03日
    浏览(62)
  • 【嵌入式Qt开发入门】如何使用Qt进行文本读写——QFile读写文本

            在很多时候我们需要读写文本文件进行读写,比如写个 Mp3 音乐播放器需要读 Mp3 歌词里的文本,比如修改了一个 txt 文件后保存,就需要对这个文件进行读写操作。本文介绍简单的文本文件读写,内容精简,让大家了解文本读写的基本操作。         QFile 类提

    2024年02月12日
    浏览(42)
  • 【入门篇】本章包括创建云项目、数据库的使用、云存储管理、云函数的基本使用、实战举例(小程序之云函数开发入门到使用发布上线实操)

    云函数 云函数相当于服务器接口的概念,它并属于小程序端代码。它是以函数的形式运行后端代码来响应事件以及调用其他服务。运行环境是Node.js。 一、基创建云函数项目 打开微信开发者工具: 打开微信开发者工具,并登录你的微信开发者账号。 创建项目: 如果还没有创

    2024年04月26日
    浏览(40)
  • AIOT人工智能物联网+项目实战

    前言 🌟🌟🌟🌟🌟🌟 关于AIOT相关内容以及项目实战点击此处学习 ,以下内容为简单介绍 💝 如果大家对AIOT(人工智能物联网)有兴趣,可以 收藏加关注 哦!!!本文将持续更新~~~ 💝 希望大家在学习的道路上勇往直前💝💝 一,什么是AIOT AIOT(人工智能物联网)是人工

    2024年02月08日
    浏览(46)
  • 物联网实战--入门篇之(七)嵌入式-MQTT

    目录 一、MQTT简介 二、MQTT使用方法 三、MQTT驱动设计 四、代码解析 五、使用过程 六、总结 一、MQTT简介         MQTT因为其轻量、高效和稳定的特点,特别适合作为物联网系统的数据传输协议,已经成为物联网事实上的通信标准了。关于协议的具体内容看看这篇文章和官方文

    2024年04月08日
    浏览(84)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包