![](https://img-blog.csdnimg.cn/direct/8e5d80d1fd4d4f5ebcbee62acd0e377b.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C/C++编程集合
文章平均质量分 90
主要包括C/c++的编程精进,以及C/C++的面试
发狂的小花
公众号:极空AI
AR行业经验、算法部署优化、图像处理算法、slam、SGBM、相机标定、TOF
CPU、DSP、GPU、算子针对硬件优化
展开
-
C语言面试题-C语言实现对一个二维数组中目标值的查找
本文主要介绍用C语言实现对一个二维数组中目标值的查找,这是一道面试题。基本有两个方法,利用二维数组的本质是一维的或者分别对行列的遍历,本质上是一样的。对于这种查找很容易想到利用二分法实现。时间复杂度大概。原创 2023-10-29 13:00:46 · 211 阅读 · 0 评论 -
C语言面试题-C语言实现并详解大端序和小端序
大端存储方式:数据的低位存储到内存的高地址中,数据的高位存储到内存的低地址中小端存储方式:数据的低位存储到内存的低地址中,数据的高位存储到内存的高地址中。原创 2023-10-26 11:25:01 · 122 阅读 · 0 评论 -
C语言面试题-C99中的restrict关键字详解
restrict是一个用于限定指针的关键字,一般定义int * restrict a,用来告知编译器,对于该指针指向的内容的修改,只能通过该指针实现,这样做的一个好处是,可以让编译器来更好的优化代码,生成效率更高的汇编代码。gcc编译时需要 加-std=c99 来实现对c99的支持。原创 2023-10-26 11:03:17 · 558 阅读 · 0 评论 -
C语言面试-C语言实现字符串翻转
字符串翻转是c语言面试基本题中常见的,c语言翻转的实现思路一般是取出来重排,或者前后字符串中的字符对调,那么一般前后字符的对调效率比较高。这里实现前后对调的方法。对字符串翻转的实现一般第一步需要知道字符串的长度(strlen(str),然后对字符串进行前后遍历。原创 2023-10-26 18:01:46 · 397 阅读 · 0 评论 -
C语言面试题-C语言头节点法实现对两个升序链表的合并
本文主要使用C语言实现对两个升序列表的合并,涉及到链表的创建、链表的插入、链表排序、链表的合并等。这是常考的一道面试题,比较经典,既可以考察对于链表的理解也可以考察对于排序算法。这里使用带有头结点的链表来实现。原创 2023-10-27 17:10:37 · 107 阅读 · 0 评论 -
C/C++常见面试题(五)
移动语义(Move Semantics)是一种C++中的特性,用于在对象之间转移资源所有权而不进行深拷贝。传统的拷贝构造函数和赋值运算符会对数据进行深拷贝,即将源对象的数据复制一份到目标对象中。这种操作对于大型对象或资源密集型操作来说可能会很昂贵,造成性能下降。移动语义通过使用移动构造函数和移动赋值运算符来实现资源的转移,而非复制。它可以将源对象内部指针或资源的所有权直接转移到目标对象,避免了不必要的数据复制和内存分配。原创 2023-12-24 00:26:49 · 1212 阅读 · 0 评论 -
C语言面试题-C语言编码详解动态链接与静态链接的区别
链接主要负责将生成的*.o和含有主函数的源文件,以及一些库文件,链接成可执行文件;链接分为动态链接和静态链接,一般默认使用动态链接,使用静态链接,需要加-static 来告知编译器。 静态链接需要静态库,静态库在Linux下格式是*.a,在Windows下是*.lib。 动态链接需要动态库,动态库在Linux下格式是*.so,在Windows下是*.dll。原创 2023-10-21 15:58:36 · 116 阅读 · 0 评论 -
C/C++常见面试题(一)
C/C++最全面试题,最全基础,学会这些可以应对市场上几乎所有的面试题原创 2023-11-28 19:04:23 · 1313 阅读 · 0 评论 -
高性能计算工程师面试经验
高性能计算面试原创 2024-03-11 16:48:16 · 1104 阅读 · 2 评论 -
C/C++常见面试题(三)
宏定义中的两个##符号是连接运算符,在预处理阶段用于将两个标识符(identifier)连接在一起形成一个新的标识符。这种操作称为标识符的拼接(token concatenation)。// 将a和b拼接成abreturn 0;在上述代码中,CONCAT宏定义使用了##连接运算符,将传入的参数a和b进行拼接。在printf()语句中,我们通过将a和b拼接成了ab,最终输出结果为10。原创 2023-12-20 19:04:05 · 1156 阅读 · 0 评论 -
C语言面试题-C语言中的多线程机制
(3)线程的分离状态(分离线程:主动结束 和 可汇合线程:等待原有创建线程结束 才结束,即pthread_ioin()调用后,该子线程结束),pthread_join(thread_id,void * (ret));2 创建线程 pthread_create(&thread_id,NULL,fibonacci_com_func,&in);1 申请线程对象,需要包含#include ,pthread_t thread_id;(2)调度的优先级,原创 2023-11-09 14:41:00 · 131 阅读 · 0 评论 -
算法部署优化工程师面试题整理
算法部署优化面试,AI算子优化原创 2024-03-11 16:27:01 · 2065 阅读 · 0 评论 -
C语言面试题-C语言实现bit位的翻转
bit位的翻转,一般只对无符号数进行,对于有符号数,由于符号位的存在,需要对其进行特殊处理,这里使用c来实现对一个无符号整数实现bit位的翻转,假使32位,[0,31],即bit0bit31,bit1bit30,bit2bit29...。原创 2023-10-26 17:30:37 · 765 阅读 · 0 评论 -
C语言面试题-C语言详解字节对齐原则
(1)在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等)的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。(2)为了使CPU能够对变量进行快速的访问,变量的起始地址应该具有某些特性,即所谓的”对齐”.比如4字节的int型,其起始地址应该位于4字节的边界上,即起始地址能够被4整除.(3)对于32位机来说,4字节对齐能够使cpu访问速度提高,比如说一个long类型的变量,如果跨越了4字节边界存储,那么cpu要读取两次,这样效率就低了。原创 2023-11-03 16:30:08 · 126 阅读 · 0 评论 -
C/C++常见面试题(二)
return 0;如上的一个宏定义:切记宏定义的本质只是简单的替换,因此对于宏定义的操作,一般要求加括号,比如上述的宏定义,要计算x的三次方的话,应该写成 VHU(x) (x)*(x)*(x)原创 2023-12-10 15:29:47 · 969 阅读 · 0 评论 -
C语言面试题-快速理解并用C实现求一个数组中的众数
c语言标准输入输出流,求一个数组中的众数和出现的次数原创 2023-11-21 00:33:20 · 285 阅读 · 0 评论 -
C/C++常见面试题(四)
在C++中,类是一种用户自定义的数据类型,用于封装数据和相关操作。它可以看作是一个模板或蓝图,描述了对象的属性(成员变量)和行为(成员函数)。要定义一个类,可以使用class关键字后跟类名,并在大括号中定义类的成员变量和成员函数。private:// 成员变量public:// 成员函数上述代码定义了一个名为 MyClass 的类,包含一个私有的整型成员变量 myVariable 和一个公有的成员函数 myFunction()。要实例化一个类,需要创建该类的对象。原创 2023-12-23 18:53:34 · 1263 阅读 · 0 评论 -
C++面向对象(OOP)编程-友元(友元函数和友元类)
本文主要介绍面向对象编程的友元的使用,以及友元的特性和分类,提供C++代码。原创 2023-12-13 19:46:35 · 1118 阅读 · 0 评论 -
C++面向对象(OOP)编程-四种类型转换
本文主要介绍C/C++的四中强制类型转换,包括static_cast、const_cast、dynamic_cast、reinterpret_cast。原创 2023-12-20 18:45:04 · 931 阅读 · 0 评论 -
C++面向对象(OOP)编程-STL详解(vector)
泛型编程是一种代码重用技术,尽可能的将代码写的抽象和通用,将算法从数据结构抽象出来,以便适配多种多样的数据结构,C++的模板编程就是一种泛型编程技术。原创 2023-12-20 14:55:23 · 1625 阅读 · 0 评论 -
C++面向对象(OOP)编程-引用(左引用、右引用、万能引用、完美转发)
左值 (lvalue, left value),顾名思义就是赋值符号左边的值。准确来说, 左值是表达式(不一定是赋值表达式)后依然存在的持久对象。右值 (rvalue, right value),右边的值,是指表达式结束后就不再存在的临时对象。纯右值、将亡值。纯右值 (prvalue, pure rvalue),纯粹的右值,要么是纯粹的字面量,例如 10, true;要么是求值结果相当于字面量或匿名临时对象,例如 1+2。原创 2023-12-20 00:36:28 · 770 阅读 · 0 评论 -
C++面向对象(OOP)编程-线程返回值
函数可以有返回值,那么线程作为一个handler是如何返回值的呢?在C语言中线程可以直接返回值,然后通过thread.join(返回值)来获取,但是C++不支持这样做,C++中是怎么返回线程的返回值的呢?本文将会比较详细的介绍C语言线程的返回值,以及几种C++线程替代返回值的方法。🎬:一个全栈工程师的升级之路!🎀CSDN主页🌄人生秘诀:学习的本质就是极致重复!原创 2023-12-28 10:59:12 · 923 阅读 · 0 评论 -
C++面向对象(OOP)编程-多线程详解
要理解多线程需要理解线程和进程的区别。应用由程序和数据组成,程序中包括多个或者一个进程,进程中包括多个或者一个线程。进程的范围大于线程。原创 2023-12-27 20:53:01 · 936 阅读 · 0 评论 -
C++面向对象(OOP)编程-详解vector的扩容
vector是C++ STL中的一个动态数组容器,相比于静态数组,vector的优势是可以动态改变其大小。C++使用时仅仅包含其头文件即可使用。vector 是一个类模板,本质上是一个动态变长数组即顺序表,元素的类型是任意的内置或者自定义的类型,存储在连续的存储空间,访问的时间复杂度为O(1),对于尾部元素的插入和删除时间复杂度都是常量级别的。原创 2023-10-20 12:06:26 · 170 阅读 · 0 评论 -
C++面向对象(OOP)编程-I/O操作(输入输出)
std::fstream`是C++标准库中的一个类,用于文件的输入/输出操作。指数据传外设(一般是显示器)传入内存,或者从硬盘读取到内存,称为输入流,输入操作就是将外设数据或者硬盘数据转换成输入流,输入流在内存中存储。指数据从内存输出到外设(一般是显示器),或者输出保存到文件存储在硬盘中,此时的数据称为输出流,输出流在内存中,将输出流输出到外设或者硬盘的操作叫输出操作。接着,我们检查文件是否成功打开,如果成功打开,就向文件中写入一行文本。是C++标准库中的一个头文件,它包含了用于输入输出操作的类和函数。原创 2023-12-14 11:50:31 · 1198 阅读 · 0 评论 -
C++面向对象(OOP)编程-C++11新特性详解
C++11作为一个重要的版本,引入了很多新的特性,解决了C++语言本身很多遗留的内存泄露问题,并且提供了很多比较灵活的用法。引入的auto,智能指针、线程机制都使得C++语言的灵活性、安全性、并发性有了很大的提升。本文会比较详细的介绍C++11引入的新特性,以及各自引入的原因和基本的用法。原创 2023-12-26 11:26:15 · 1326 阅读 · 0 评论 -
堆与栈的效率的比较
a. 存储方式:堆是从低地址向高地址增长的,栈是从高地址到低地址增长的b. 存储结构:堆是动态存储、链式存储;栈是有序存储、顺序存储;数据结构最本质的存储方式只有顺序存储和链式存储。c. 数据操作原则:堆是先进先出(FIFO),栈是后进先出(LIFO)d. 内存管理:堆由OS管理,栈由程序员手动管理e. 生存周期:堆在程序员手动释放时结束,栈函数调用完成后结束,一般而言,堆的生存周期比较长f. 数据存储效率、大小、信息:堆主要存储动态生命周期的对象和数据结构,空间可以很大,效率较低;原创 2023-11-28 19:28:50 · 1080 阅读 · 0 评论 -
C++面向对象(OOP)编程-智能指针
智能指针是C++11引入的类模板,用于管理资源,行为类似于指针,但不需要手动申请、释放资源,所以称为智能指针。所以智能指针的本质是类模板。原创 2023-12-19 16:52:59 · 842 阅读 · 0 评论 -
C++面向对象(OOP)编程-浅拷贝与深拷贝
浅拷贝(Shallow Copy)和深拷贝(Deep Copy)是在对象复制过程中的两种不同方式:1 在未定义拷贝构造函数的情况下,系统会调用默认的拷贝函数——即浅拷贝(不用自己构造),它能够完成成员的简单的值的拷贝一一复制。当数据成员中没有指针时,浅拷贝是可行的;原创 2023-12-16 13:31:44 · 982 阅读 · 0 评论 -
从汇编代码直观看i++和++i的区别
i++和++i是C语言入门最基础的一个知识,以前学的时候,仅仅是记住,i++是先赋值再加1,++i是先相加后赋值。前段时间在一个循环buffer的读写指针访问时,不小心使用了i++导致,程序一直报段错误,由此我试着从更底层的角度来理解下i++和++i。原创 2023-11-02 13:11:38 · 181 阅读 · 0 评论 -
C++面向对象(OOP)编程-类与结构体的区别
class和struct的语法基本相同,从声明到使用,都很相似,但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到struct是值类型,class是引用类型,因此它们具有所有值类型和引用类型之间的差异由于堆栈的执行效率要比堆的执行效率高,但是堆栈资源却很有限,不适合处理逻辑复杂的大对象,因此struct常用来处理作为基类型对待的小对象,而class来处理某个商业逻辑。原创 2023-12-19 13:50:12 · 1013 阅读 · 0 评论 -
C++面向对象(OOP)编程-位运算详解
逻辑移位和算术移位的主要区别在于它们如何对待被移出的位。逻辑移位主要用于无符号数的操作,而算术移位则用于有符号数的操作,以保持数值的准确性。逻辑移位仅仅是移位不会考虑符号位,而算术移位会保留符号位的准确。// 负数的补码表示法: 除符号位其他位反码+1// -3的二进制原码: 10000000000000000000000000000011// -3的二进制反码: 11111111111111111111111111111100。原创 2023-12-22 18:28:09 · 1628 阅读 · 0 评论 -
C++面向对象(OOP)编程-运算符重载
本文主要介绍C++面向对象编程中的多态的手段之一运算符重载,讲清运算符重载的本质,以及通过代码实现一些常用的运算符重载。原创 2023-12-15 21:45:29 · 1051 阅读 · 0 评论 -
C++面向对象(OOP)编程-异常机制
异常是指在程序运行过程中,由于系统条件、操作不当等原因而引起的运行错误。除零错误、指针访问受保护空间、数据越界、分配空间失败、要打开的文件不存在等。C++异常处理使用关键字trycatch和throw来实现。try块:用于包含可能会抛出异常的代码。当异常被抛出时,程序会立即停止执行try块中的剩余代码,并将控制权转移到与该异常匹配的catch块。catch块:用于捕获并处理异常。每个catch块都指定了要捕获的异常类型。当异常与某个catch块匹配时,程序将执行该块中的代码来处理异常。throw。原创 2023-12-19 00:19:02 · 834 阅读 · 0 评论 -
C++面向对象(OOP)编程-模板
template //模板头(模板说明)返回值类型 函数名(参数列表) //函数定义函数体;(1) template是声明模板的关键字,告诉编译器开始泛型编程。(2)尖括号中的typename是定义形参的关键字,用来说明其后的形参名为类型 参数,(模板形参)。Typename(建议用)可以用class关键字代替,两者没有区别。原创 2023-12-18 20:44:38 · 879 阅读 · 0 评论 -
C/C++面向对象(OOP)编程-回调函数详解(回调函数、C/C++异步回调、函数指针)
函数指针、函数指针类型,函数回调,异步回调、C语言异步回调、C++异步回调原创 2024-01-01 00:16:09 · 4078 阅读 · 8 评论