灬烟花易冷灬
码龄9年
关注
提问 私信
  • 博客:62,619
    社区:27
    问答:218
    62,864
    总访问量
  • 55
    原创
  • 290,203
    排名
  • 235
    粉丝
  • 0
    铁粉
  • 学习成就

个人简介:不以物喜 不以己悲

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:辽宁省
  • 加入CSDN时间: 2015-11-03
博客简介:

yy1695990107的博客

查看详细资料
  • 原力等级
    成就
    当前等级
    3
    当前总分
    220
    当月
    2
个人成就
  • 获得270次点赞
  • 内容获得3次评论
  • 获得294次收藏
  • 代码片获得180次分享
创作历程
  • 1篇
    2024年
  • 33篇
    2023年
  • 7篇
    2022年
  • 5篇
    2021年
  • 4篇
    2019年
  • 1篇
    2018年
  • 4篇
    2017年
成就勋章
TA的专栏
  • C++面试
    26篇
  • openwrt
    3篇
  • 编程工具
    1篇
  • C#
    1篇
  • 智能硬件
    3篇
  • 鸿蒙系统
兴趣领域 设置
  • 编程语言
    c++qt
  • 开发工具
    vscode
  • 后端
    后端
  • 嵌入式
    物联网嵌入式硬件
创作活动更多

AI大模型如何赋能电商行业,引领变革?

如何使用AI技术实现购物推荐、会员分类、商品定价等方面的创新应用?如何运用AI技术提高电商平台的销售效率和用户体验呢?欢迎分享您的看法

186人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

C++指针比较

指针str5、str6、str7、str8也是在栈中分配的,他们都是指向“abc”字符串,注意abc存放在数据区,所以str5、str6、str7、str8其实指向同一块数据区的内存。因此17,18,19输出的都是1.数组str1、str2、str3、str4都是在栈中分配的,内存中的内容都为“abc”加一个“\0”,但是他们的位置是不同的,因此代码第15行和第16行输出的都是0.内存中各个数据的存放方式。
原创
发布博客 2024.01.31 ·
432 阅读 ·
8 点赞 ·
0 评论 ·
8 收藏

OpenWrt版本更迭说明

OpenWrt 12.09:2012年发布,引入了“Attitude Adjustment”代码名称,改进了IPv6支持和网络配置。OpenWrt 15.05:2015年发布,引入了“Chaos Calmer”代码名称,增强了网络管理和IPv6支持。OpenWrt 10.03:2010年发布,引入了“Backfire”代码名称,添加了多个硬件平台的支持。OpenWrt 8.09:2009年发布,引入了“Backfire”代码名称,添加了多个硬件平台的支持。OpenWrt 0.9:2004年发布的最初版本。
原创
发布博客 2023.12.29 ·
984 阅读 ·
8 点赞 ·
0 评论 ·
10 收藏

openwrt源码编译

当前我们基于15.05版本开发,如果开发者想用最新的OpenWRT系统,可以下载 https://github.com/openwrt/openwrt.git。git clone https://github.com/openwrt/chaos_calmer.git // 官方下载地址。/target : 构建imagebuilder,内核,sdk和工具链所需的生成文件和配置。/toolchain : 构建工具链所需的生成文件和配置。/package : 用于文件生成和菜单配置的软件包。
原创
发布博客 2023.12.28 ·
868 阅读 ·
7 点赞 ·
0 评论 ·
7 收藏

arduino json 解析

【代码】arduino json 解析。
原创
发布博客 2023.12.17 ·
618 阅读 ·
10 点赞 ·
0 评论 ·
7 收藏

如何停止和启动LUCI服务

【代码】如何停止和启动LUCI服务。
原创
发布博客 2023.12.17 ·
754 阅读 ·
10 点赞 ·
0 评论 ·
9 收藏

复杂指针的声明

func被一对括号包含,且左边有一个*号,说明func是一个指针,跳出括号,右边也有一个括号,那么func是一个指向函数的指针,这类函数具有int*和int (*)(int*)这样的形参,返回值类型为int类型。首先找到那个未定义的标识符func,它的外面有一对圆括号,而且左边是一个*号,这说明func是一个指针;然后跳出这个圆括号,先看右边,也是一个圆括号,这说明(*func)是一个函数,而func是一个指向这类函数的指针,就是一个函数指针,这类函数具有int*类型的形参,返回值类型是int。
原创
发布博客 2023.12.17 ·
520 阅读 ·
9 点赞 ·
0 评论 ·
11 收藏

为什么传引用比传指针安全

对于指针来说,它可以随时指向别的对象,并且可以不被初始化,或者为NULL,所以不安全。const指针仍然存在空指针,并且有可能产生野指针。由于不存在空引用,并且引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用,因此引用很安全。
原创
发布博客 2023.12.01 ·
397 阅读 ·
11 点赞 ·
0 评论 ·
8 收藏

指针和引用的区别

实际上,在语言层面,引用的用法和对象一样;在二进制层面,引用一般都是通过指针来实现的。只不过编译器帮我们完成了转换。总体来说,引用既具有指针的效率,又具有变量使用的方便性和直观性。
原创
发布博客 2023.12.01 ·
385 阅读 ·
10 点赞 ·
0 评论 ·
11 收藏

如何交换两个字符串

如果不用指针引用,那么指针交换只能在swap函数中有效,因为在函数体中,函数栈会分配两个临时的指针变量分别指向两个指针参数。对实际的ap和bp没有影响。这里swap函数是利用传指针引用实现字符串交换的。由于swap函数是指针引用类型,因此传入的函数就是实参,而不是形参。
原创
发布博客 2023.12.01 ·
936 阅读 ·
10 点赞 ·
0 评论 ·
9 收藏

指针变量引用

代码第16行,将pa指向的内容加1。由于pa是p的引用,所以此时实际上是对p指向的内容加1,也就是b加1,结果为b变成了12;代码第10行,将pa指向的内容加1。由于pa是p的引用,所以此时实际上是对p指向的内容加1,也就是a加1,结果为a变成了2;代码第15行,将pa指向变量b的地址。由于pa是p的引用,所以此时p也指向了b的地址;代码第5行和第6行,整型变量a和整型变量b分别被初始化为1和10;代码第7行,声明整型的指针变量p并且初始指向a;代码第8行,声明p的一个指针引用pa;
原创
发布博客 2023.12.01 ·
371 阅读 ·
7 点赞 ·
0 评论 ·
11 收藏

一般变量引用

代码第21行,将a的地址与rn的地址进行了比较,如果相等,变量equal的值为1,否则为0。rn和a占内存中的同一个存储单元,它们具有同一个地址,所以equal为1。代码第12行,将rn的值赋为b的值。此时rn其实就是a的一个别名,对rn的赋值其实就是对a赋值。因此执行完赋值后,a的值就是b的值,即都是20.代码第7行和第8行,整型变量a和整型变量b分别被初始化为10和20。代码第16行,将rn的值赋为100,于是a的值变成了100.代码第9行,声明rn为变量a的一个引用。
原创
发布博客 2023.12.01 ·
363 阅读 ·
8 点赞 ·
0 评论 ·
7 收藏

内联函数与宏有什么区别

内联函数在编译时展开,宏在预编译时展开。 在编译的时候,内联函数可以直接被镶嵌到目标代码中,而宏只是一个简单的文本替换。 内联函数可以完成诸如类型检查,语句是否正确等编译功能,宏就不具备这样的功能。 宏不是函数,inline函数时函数。 宏在定义时要小心处理宏参数,否则容易出现二义性。而内联函数定义时不会出现二义性。
原创
发布博客 2023.11.30 ·
381 阅读 ·
7 点赞 ·
0 评论 ·
7 收藏

为什么不把所有的函数都定义成内联函数

内联是以代码膨胀为代价,仅仅省去了函数调用的开销,从而提高函数的执行效率。如果执行函数体内代码的时间相比于函数调用的开销较大,那么效率的收获会很少。另一方面,每一处内联函数的调用都要复制代码,将使程序的总代码量增大,消耗更多的内存空间。所以,不要随便地将构造函数和析构函数的定义放在类的声明中。一个好的编译器将会根据函数的定义体,自动地取消不值得的内联。
原创
发布博客 2023.11.30 ·
500 阅读 ·
7 点赞 ·
0 评论 ·
7 收藏

内联函数使用的场合

内联函数在C++类中应用最广的,应该是用来定义存取函数。我们定义的类中一般会把数据成员定义成私有的或者保护的,这样,外界就不能直接读写我们类成员的数据了。对于私有或者保护成员的读写就必须使用成员接口函数来进行。如果我们把这些读写成员函数定义成内联函数的话,将会获得比较好的效率。首先使用inline函数可以完全取代表达式形式的宏定义。
原创
发布博客 2023.11.30 ·
409 阅读 ·
6 点赞 ·
0 评论 ·
7 收藏

为什么inline能很好的取代表达式形式的预定义

inline定义的类的内联函数,函数的代码被放入符号表中,在使用时直接进行替换,没有了调用的开销,效率也很高。 类的内联函数也是一个真正的函数。编译器在调用一个内联函数时,首先会检查它的参数的类型,保证调用正确;然后进行一系列的相关检查,就像对待任何一个真正的函数一样。这样就消除了它的隐患和局限性。 inline可以作为某个类的成员函数,当然就可以在其中使用所在类的保护成员及私有成员。
原创
发布博客 2023.11.30 ·
389 阅读 ·
6 点赞 ·
0 评论 ·
7 收藏

为什么要引入内联函数

这种宏定义在形式及使用上像一个函数,但它使用预处理器实现,没有了参数压栈,代码生成等一系列的操作,因此效率很高。这种宏定义在形式上类似于一个函数,但在使用它时,仅仅只是做预处理器符号表中的简单替换,因此它不能进行参数有效性的检测,也就不能享受C++编译器严格类型检查的好处。另外,它的返回值也不能被强制转换为可以转换的合适类型,这样,它的使用就存在着一系列的隐患和局限性。在C++中引入了类及类的访问控制,这样,如果一个操作或者说一个表达式涉及类的保护成员或者私有成员,你就不可能使用这种宏定义来实现。
原创
发布博客 2023.11.30 ·
444 阅读 ·
9 点赞 ·
0 评论 ·
7 收藏

#pragma pack的作用

代码第3行用#pragma pack将对齐设置为1。由于结构体test中的成员s1,s2和i的自身对齐分别为2,2和4,都是小于1。因此他们都是用1作为对齐,sizeof(test)=1+2+2+4=9。如果注释代码第3行,则编译器默认的对齐为8。所以各个成员的对齐都小于8,因此他们使用自身的对齐,sizeof(test)=1+1(补齐)+2+2+2(补齐)+4=12。
原创
发布博客 2023.11.30 ·
368 阅读 ·
6 点赞 ·
0 评论 ·
7 收藏

sizeof有哪些用途

与存储分配和IO系统那样的例程进行通信。 查看某个类型的对象在内存中所占的单元字节。 在动态分配一个对象的时候,可以让系统知道要分配多少内存。 便于一些类型的扩展,在window系统中很多结构类型就有一个专用的字段是用来放该类型的字节大小的。 由于操作数的字节数在实现时可能出现变化,建议在涉及操作数字节大小的时候用sizeof来代替常量的计算。 如果操作数是函数中的数组形参或者函数类型的形参,则sizeof给出其指针的大小。
原创
发布博客 2023.11.29 ·
444 阅读 ·
9 点赞 ·
0 评论 ·
7 收藏

sizeof与strlen有哪些区别

sizeof是操作符,strlen是函数。 sizeof操作符的结果类型是size_t,它在头文件中typedef为unsignedint类型,该类型保证能容纳实现所建立的最大对象的字节大小。 sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以"\0"结尾的。 数组做sizeof的参数不退化,传递给strlen就退化为指针了。 大部分编译程序在编译的时候sizeif就被计算过了,这就是sizeof(x)可以用来定义数组维数的原因。strlen的结果要在运行的时候才能计算出来
原创
发布博客 2023.11.29 ·
403 阅读 ·
8 点赞 ·
0 评论 ·
11 收藏

使用sizeof计算虚拟继承的类对象的空间大小

【代码】使用sizeof计算虚拟继承的类对象的空间大小。
原创
发布博客 2023.11.27 ·
453 阅读 ·
8 点赞 ·
0 评论 ·
9 收藏
加载更多