- 博客(206)
- 资源 (16)
- 收藏
- 关注
原创 【和春笋一起学C++】(十四)指针与const
在C++中,const关键字用于指针时有两种主要情况:const int* pt和int* const pt。第一种情况,const int* pt,表示指针pt指向一个整型常量,不能通过pt修改该常量的值,但pt本身可以指向不同的地址。第二种情况,int* const pt,表示指针pt本身是常量,不能指向其他变量,但可以通过pt修改所指向变量的值。此外,将常量地址赋给非常量指针是非法的,因为这可能导致通过指针修改常量的值,违反了常量的定义。在实际编程中,使用const可以避免无意修改数据,并增加代码的灵
2025-05-17 18:52:37
422
原创 【和春笋一起学C++】(十三)将数组名用作函数参数的一个实例
总结:使用数组名作为函数参数时需要考虑在函数中是否需要修改数组元素的值,如果不需要修改数组元素的值,则需要将数组设置为const类型,以防止在函数中操作数组元素时无意中修改了数组元素的值。这里注意,show_array函数中的形参const double ar[]并不意味着实参数组必须是常量,它只代表不能在show_array()函数中修改ar数组元素的值。一个简单的实例,控制台终端输入一个数组后,显示数组中各个元素的值,然后乘以一个系数后再输出各个元素的值。
2025-05-11 18:06:07
378
原创 【和春笋一起学C++】函数——C++的编程模块
可能很多初学者会问,有了函数定义为什么需要函数原型?C++允许一个程序放在多个文件中单独编译,然后再将它们组合起来。在这种情况下,编译器在编译main()函数时,可能无法访问函数定义的代码。避免使用函数原型的唯一方法是在main()函数之前定义它。但C++的编程风格是将main()函数放在最前面,因为它通常提供了程序的整体风格。
2025-04-29 22:48:04
1017
原创 【和春笋一起学C++】文本文件I/O
在windows系统中读取键盘的输入和在屏幕上显示输出统称为:控制台输入/输出。把读取文本文件和把字符输出到文本文件中统称为:文本文件I/O。
2025-03-22 23:03:10
972
1
原创 【和春笋一起学C++】switch语句
即程序跳转到switch中特定代码行后将依次执行之后的语句,不会在遇到下一个case处自动停止。要让程序执行完一组特定语句后停止,则必须用break语句。使用break语句后,程序才会跳出switch,开始执行switch之后的语句;switch不是为处理取值范围而设计的,switch语句中的每一个case标签都必须是一个单独的值。当所有选项都可以使用整型常量来标识且数目不小于3,那么使用switch是非常合适的,相比if else语句,它的运行效率更高,代码更简洁。
2025-03-09 09:28:04
288
原创 【和春笋一起学C++】逻辑操作符和条件操作符
另外,和关系操作符,算法操作符相比,逻辑非得优先级要高于关系操作符和算术操作符,而逻辑与(&&)和逻辑或(||)的优先级要低于关系操作符。当x等于0时,1/x是非法的,但因为此时x!=0已经为false,程序不会继续向右计算表达式(1/x >100)的值,所以这段代码在运行时不会报错。如果expression1为true,则整个表达式的值为expression2的值,否则整个表达式的值为expression3的值。当关系比较复杂时,为了便于理解和阅读代码,一般使用if else语句。的if else语句。
2025-03-03 22:37:19
301
原创 JETSON ORIN NX刷机趟坑记录
先烧录系统,系统烧录完成后再烧录SDK,同样在开始烧录前需要进行SDK烧录设置,如下图所示:图中报错了,是因为设备的IP没有修改,使用了默认的静态IP地址,这时你需要登录到你的设备上去查看下你板子的IP(因上一步系统已经烧录完成,此时你的设备可以正常开机了,你可以使用之前设置的用户名和密码正常登录进去),然后再填写到下图中的IP Address中。填写完IP后点击Flash,如果IP填写正确,则会进入到下图所示的界面,即检测你的电脑IP和设备的IP是否在同一个网段内,磁盘空间是否足够。
2025-02-19 17:48:36
821
原创 【和春笋一起学C++】if else语句
if else语句格式如下:如果测试条件为true或非零,程序执行statement1,跳过statements,如果测试条件为false或0,则程序将跳过statement1,执行statement2。看上去像一个新的控制结构——if else if else,但实际上它只是一个if else被包含在另一个if else中。修订后的格式更为清晰,使程序员通过浏览代码便能确定不同的选择,整个构造仍被视为一条语句。
2025-02-18 21:25:00
396
原创 【和春笋一起学C++】文本输入与读取(二)
上篇文章《》学习了遇到某个字符时停止读取,那如果要读取键盘输入的所有字符该怎么做呢。答案是检测文件尾(EOF)。很多操作系统都支持通过键盘模拟文件尾条件,Unix通过Ctrl+D实现,windows系统通过Ctrl+Z实现。
2025-01-08 21:50:12
589
原创 【和春笋一起学C++】文本输入与读取
前面学习了while语句后,下面用while语句实现一个重要的功能,逐字符的读取键盘输入的字符序列,并输出到显示屏上。
2024-12-26 10:04:06
706
原创 【和春笋一起学C++】while语句和类型别名
执行完循环体后,程序返回测试条件,对它进行重新判断,如果该条件为非零,则再次执行循环体。分号可以放在while括号的后面,也可以另起一行只写一个分号,单独一行只有一个分号它也是一条语句,只不过是条空语句,什么都没做。在使用while语句时需要注意的一点是while圆括号后面不能加分号,加了分号编译不会报错,也能执行,但这个循环很可能是一个死循环,如果上面程序在while括号的后面加了分号,会出现什么情况呢?注意,末尾有分号,表明这是一条语句,可以理解为是一条声明语句,将BYTE声明为char的别名。
2024-12-20 16:07:25
867
原创 【和春笋一起学C++】字符串比较
在C语言中用于比较字符串的函数为strcmp函数,该函数定义在头文件中,是一个标准库函数。strcmp函数的工作原理是逐字符比较两个字符串,直到找到不同的字符或遇到空符'\0'为止。另外,如果str1和str2为字符数组,如果存储在字符数组中的字符串相同,不管str1和str2两个数组的大小是否相等,strcmp函数都将返回0。C语言中虽然不能用关系操作符来比较字符串,但可以用它来比较字符,因为字符实际上是整型,下面代码为输出所有的字母。函数接受两个字符串地址作为参数,即参数可以是。
2024-12-17 22:05:01
562
原创 【和春笋一起学C++】for语句和递增操作符
for语句包含控制体和循环体,循环体跟在控制体的后面。如下所示,控制体为for括号中的几个表达式,循环体为花括号中的几条语句。语句1;语句2;设置初始值;执行测试,看看循环是否应当继续进行;执行循环操作;更新用于测试的值;初始化,测试和更新操作这三个部分构成了for语句的控制部分,这些操作由括号括起来,其中每一部分都是一个表达式,且彼此由分号隔开。控制体后面的语句叫循环体,只要测试表达式为true,它便执行。控制体只执行一次循环变量的初始化;循环体中可以包含一条或多条语句;
2024-12-13 15:37:57
951
原创 【和春笋一起学C++】OpenCV中数组和指针运用实例
opencv中遍历图像像素的方法有十几种,本文通过几种遍历图像像素的方式编写了一个简单的图像二值化函数,既巩固了指针和数组的知识,又掌握了遍历opencv中图像像素的方法。
2024-12-02 21:31:12
608
原创 【和春笋一起学C++】使用new创建动态数组
上面这种方式创建的数组在程序编译时将为它分配内存空间,不管程序最终是否使用数组,数组都在那里,它占用了内存空间。在编译时给数组分配内存被称为静态联编,意味着数组是在编译时加入到程序中的。但如果使用new创建数组,则不在编译阶段为数组分配内存空间,而是在运行阶段创建并分配内存空间。在运行阶段,如果用到了数组则创建,如果用不到数组则不创建,称为动态联编。数组在程序运行时创建,这种数组叫动态数组。......使用静态联编时,必须在编写程序时指定数组的长度,使用动态联编时,程序在运行时确定数组的长度。
2024-11-30 20:15:44
1492
原创 【和春笋一起学C++】C++中指针的原理
面向对象编程与传统的过程性编程的区别在于OOP强调的是在运行阶段(而不是编译阶段)进行决策。指针名表示的是地址,* 被称为间接值或解除引用操作符, 将其应用于指针,可以得到该地址处存储的值。上面语句表示manly是一个指针,manly表示的是一个地址,*manly表示存储在该地址处的值,*manly与常规int变量等效。int *ptr;这强调 *ptr是一个int类型的值。int* ptr;这强调,int*是一种类型,是指向int的指针。在哪里添加空格对编译器来说没有任何区别。
2024-11-28 20:26:24
368
原创 C++结构类型
其中,struct是关键字,inflatable是结构体的标签,name[20],volume,price三个变量是结构体成员,包含在花括号之间,结构体的声明以分号结束。结构声明分为内部声明和外部声明,内部声明只能被本函数使用,而外部声明则可以被其后面的任何函数使用,即可以用在文件的所有函数中。其初始化的方式和数组一样,使用由逗号分隔的值列表,并将这些值用花括号括起来。C++中的结构是用户定义的类型,结构的声明定义了这种类型的数据属性。访问类成员函数的方式是从访问结构成员变量的方式衍生而来的。
2024-11-27 23:02:20
412
原创 C++枚举类型
第二:将red, orange, yellow等作为符号常量,它们对应数值0-7,这些常量叫作枚举量。定义了枚举后,就可以用枚举名来声明这种类型的变量:如。因此,spectrum变量的值受到限制,spectrum变量被赋值时只能被赋予8个枚举量中的一个。C++的enum工具提供了一种创建符号常量的方式,这种方式可以代替const。枚举量是整型,可以被提升为int类型,但int类型不能自动转为枚举类型。对于枚举,只定义了赋值操作符,枚举类型没有算术运算。
2024-11-27 20:14:29
196
原创 C++的内存管理方式
而getneme函数体中的pn指针所指向的内存池则是动态存储方式,在getname函数结束时该内存池所占据的存储空间依然存在,内存池中依然有数据,在main函数中使用delete对该内存池的存储空间进行释放后,pn指向的内存池空间才算被释放。则即使包含指针的内存由于作用域规则和对象生命周期的原因而被释放,在自由存储空间上动态分配的变量或结构也将继续存在,且因为指向该自由存储空间的指针的内存被释放导致这部分的存储空间无法被访问,最终导致内存泄露。其中,自动存储和静态存储的主要区别在于变量的寿命。
2024-11-25 23:13:49
446
原创 C语言中的指针和字符串的赋值
将字符串复制到数组中,初始化数组时,请使用=操作符。否则请使用strcpy()。///以下形式也可以如果在使用strcpy()函数时,要存储的字符串长度超过了字符数组的长度,程序可能会产生未知的错误,这一点需要特别注意。应使用strcpy()或stmcpy()函数而不是使用赋值操作符来将字符串赋给数组。
2024-11-24 23:09:24
546
原创 孟晚舟香港中文大学演讲
在我们所生活的城市里,在我们眼睛看不到的地方,都部署了大量的光纤,在地球上,有亿万根光纤连接了我们大家,穿过家庭小区,穿过我们的城市,高山和海洋,将我们连接在一起,我们每天打电话,发微信,刷视频都离不开光纤,可是有没有人想过,如果光纤坏了,我们怎么去识别它,怎么去定位哪根光纤出了问题,就是这么一个小小的问题,曾经困扰着我们行业20多年,因为光纤本身是绝缘的,所以它无法承载电信号。奋斗是诗篇,一笔一画都是收货,漫长的征程,一朝一夕都是精彩,成长就在点滴的奋斗中,背朝灯火,面朝星光,我们要用平凡来诠释非凡。
2024-11-19 22:01:54
571
原创 转自罗翔老师的毕业寄语(二)
我想给各位分享一个故事,2600多年前,当孔子绝粮于陈蔡,七天没有饭吃,外面有暴徒袭击,但孔子依然弦歌不断,依然给学生将课,因为他要告诉他的学生,无论在什么情境下都应该临危不惧,泰然若处。这个世界其实有很多所谓的成功人士,他们并不值得羡慕,纪伯伦说过这个世界有两种痛苦,一个痛苦是野心还没有实现的痛苦,还有一个痛苦是野心成就后的无聊,我见过很多成功的和正在追逐成功的人,他们都在这两种痛苦中双向切换,所以有人说,真正能够带给我们宁静的是我们内心。如果世界接受不了我们的理想,那不是我们的问题,是世界的问题。
2024-06-30 23:02:56
518
原创 转自罗翔老师的毕业寄语
我没有能力点评历史人物,只想用冯道的话和各位同学共勉:无论在什么时代,什么地方,都能够但行好事,莫问前程。孔子说:天何言哉?四时行焉,百物生焉,天何言哉?万物生长,四季变迁,你我渺小不过天地之间一凡尘。但愿我们都能尘随光舞,在光明中看到自己的使命,尽人事,听天命,尽好自己尘世的本分。祝同学们毕业快乐
2024-06-26 16:06:54
237
转载 git使用进阶(三)——merge,rebase以及分支改名
如下图,master为基分支,在master分支的B节点处构造一个新分支feature,张三在future分支上进行开发,一段时间后开发完了,期间有了两次新的代码提交,分别为C和D,而李四在原先的master分支上提交了一次代码,产生了一个新的节点M,这时张三想把现在的代码合并到原先的master分支上,这时就需要用到rebase。:当执行rebase操作时,git会从两个分支的共同祖先开始提取待变基分支上的修改,然后将待变基分支指向基分支的最新提交,最后将刚才提取的修改应用到基分支的最新提交的后面。
2024-06-21 11:57:01
333
原创 不畏岁月惊扰
没有人不遗憾,只是有人不喊疼,即便是盛世长安三万里,不也处处写尽了遗憾吗?高适蹉跎半生,暮年得志,不遗憾吗?一切都在变化且都难遂本心,就像人字有两撇,一撇写进前半生,写的是执着,一捺写进后半生,写的是释怀。我曾错把陈醋当成墨,写进半生纸上酸,又曾“错把陈墨当成醋”,喝尽半生心里苦,终是错把墨醋两相掺,半生半涩半生酸。我本以为人生最大的遗憾是所爱隔山海,山海不可平,后来才知道,海有舟可渡,山有路可行,山海皆可平,难平是人心。我们要做的是心有山水不造作,静而不争远是非,且停且忘且随风,且行且看且从容。
2024-06-20 19:34:46
252
原创 windows平台安装labelme
之前写过一篇文章也是关于在windows平台安装labelme的:《安装qt5时出错了,原因时安装的pip版本过低。添加以后,再次尝试创建虚拟环境,成功。此时,升级下你的pip版本即可。
2024-04-29 19:29:37
1030
原创 【C++编程基础】指针变量
在输出语句输出时,系统先根据变量与地址的对应关系找到变量i的地址,因i是整形,所以就取出变量i所在地址开始的4个字节,从这四个字节中取出内容将它输出到显示器上,这种方式称为直接存取方式,或直接访问。前两行定义了一个整形和一个指向整形的指针变量,第三行含义是将i_point设置为指向整形变量i的地址,第四行设置整形i的值为5,第五行含义是将3赋值给指针变量i_point所指向的变量,所以第五行改变了i_point所指向的变量的值。为了说的更清楚,请看下面这段代码,输出的整形变量i的值是多少?
2024-04-22 15:54:38
358
原创 【C++编程基础】两个智能输入输出对象
在C语言中使用printf函数来输出变量或字符串,在使用printf函数时还需要设置格式控制符,告诉机器你要输出的是数据还是字符,比较麻烦。但在C++语言中,在C++内部预定义了两个输入输出对象,cout和cin,可以自动根据变量的类型来输出相应的信息,所以称之为智能输出对象。cout是ostream类的对象,cin是istream的对象,而ostream类和istream类是在iostream文件中定义的类。
2024-04-17 19:08:02
434
原创 【OpenCV进阶】图像中添加中文字幕
OpenCV自3.2版本后,在OpenCV_contrib模块中添加了freeType模块,将OpenCV_contrib模块编译后可以使用freeType模块并方便的在图像中添加中文字体(如果是3.1之前的OpenCV版本,那就需要你自己下载freeType库,然后编译成动态库再使用了,相信大家应该不会在用那么老的版本了吧)。好了,不废话了,上干货吧。如上代码中Font.ttf是字库,需要自己到网上下载的,网上很多,我下了楷体的中文字体类型(如果大家需要可以私信或者评论,我私发你)
2024-04-02 11:46:24
844
原创 【C++编程基础】C++语言简介
机器中一般有编译器和链接器(这些一般都集成在一个开发环境中),当程序员写完程序后,是一个个.cpp文件,这些是编译的最小单元,机器中的编译器将一个个cpp文件解析成机器可识别目标代码,这个过程就是编译。C++语言的流行不仅源于它保留了C语言的硬件处理能力, 以及更强大的数据处理能力,而且现在很多厂商提供了大量有用的类库,可以方便重用和修改。C++是在C语言基础上发展起来的,C语言赋予了C++语言紧密联系硬件的能力(C++名称中的“++”就是来自于C语言中的递增操作符)。
2024-03-30 16:49:55
420
原创 【C++编程基础】对象的赋值
类的对象的赋值就是属于同一个类的两个对象,将其中一个对象的数据成员的值赋值给另一个对象的数据成员。对象之间的赋值也是通过赋值运算符“=”进行的。本来赋值运算符只能用来对单个变量赋值,现在扩展为对两个同类对象之间的赋值,C++内部是通过对赋值运算符的重载实现的,实际上是通过成员复制完成的,将对象的数据成员值一一复制给另一个对象的数据成员值。亲爱的小伙伴们,本文一起学习同属一个类的对象之间的赋值,每日学习点新知识,旧知识学习相信也会有新的感受。
2024-03-27 15:31:13
633
原创 【C++编程基础】对象的动态建立与释放
C++程序中对象占用的内存开销比一般的变量和函数要大很多,对于长生命周期的对象,如果内存空间一直得不到释放就会造成程序运行效率低下,甚至导致有些内存碎片一直无法回收,最终导致系统运行卡顿。而动态对象可以在需要用到对象时建立,不需要使用时就撤销它,释放它所占用的内存空间供别的数据使用,这样可以提高内存空间的使用率。这种方式创建的对象只有在函数结束时,对象的内存空间才会被释放,导致在函数或程序结束前,该部分的内存空间一直被占用。同静态对象一样,动态对象在释放内存空间之前会自动调用析构函数。
2024-03-26 15:43:26
318
原创 应用程序运行报错:First section must be [net] or [network]:No such file or directory
后来发现,更重要的是括号中的一句。因为我运行的环境是linux环境,而整套程序来自Windows,对于源码cpp来说,不可能有影响,因为一般cpp在Windows下调试的差不多了,才会移植到linux环境下调试,这不可能有问题。后来我又在终端输出一些调试点,发现是在调用darknet模型时报的错,调用接口肯定没问题啊,之前一直用的,难道是模型文件问题,也不应该啊,之前也一直用这个模型。后来不知怎么的鬼使神差似得把模型文件又重新拷贝一次,这次直接从linux本地拷贝,再次运行应用程序,发现问题没有了。
2023-08-11 12:08:04
922
转载 jetson-NX平台系统由emmc启动改为由ssd启动
对于jetson-nx如果不外接ssd硬盘并设置系统由ssd启动,一般原有的emmc存储(16G)是很难满足开发调试的需求的,光安装系统和jetson-sdk就要占了90%以上的存储,所以外接ssd基本是NX平台开发的标配。
2023-07-27 09:50:08
1614
2
原创 jetson刷机工具sdkmanager历史版本下载与说明
可以看到,其实最新的sdkmanager1.9.3版本支持ubuntu16.04,18.04,20.04系统,在16.04上只支持安装jetpack4.x版本,要安装jetpack5.x版本必须要在ubuntu18.04和20.04系统上安装。打开该链接可以看到不同sdkmanager版本所适配的各系统版本,根据自己的系统版本选择所需要的sdkmanager版本。
2023-07-21 10:10:57
3172
1
原创 jetson-TX2刷机与镜像生成、恢复
在TX2正常开机状态下,使用安卓数据线连接TX2的OPT接口,在主机上输入“lsusb”,一般就能看到连接的TX2设备,其usb ID为0955:7020 Nvidia Crop,如果进入了恢复模式,则usb的ID为0955:7c18 Nvidia Crop。1. jetson tx2进入恢复模式,主机连接tx2后确认主机与TX2已连接,打开主机中Linux_for_Tegra文件夹,在该文件夹下执行如下命令,表示从TX2下载镜像。(有些可能不是这个文件夹,主要看flash.sh在哪个文件夹下)
2023-06-20 15:26:45
1529
2
解决pjreddie版darknet在cudnn8.x环境下的编译问题
2022-05-18
VS2017环境下的tinyXML库
2022-05-09
opencv4.2,包括了扩展库opencv_contrib
2022-04-12
setuptools-36.2.4.zip
2020-02-27
opencv3.4.7build.zip
2020-01-03
GDAL111版本,包含proj.dll库,能实现坐标系统的转换功能
2018-05-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人