
C++
文章平均质量分 62
u012903992
这个作者很懒,什么都没留下…
展开
-
(c语言)移位操作符
/反码:11111111111111111111111111111000 (原码的符号位不变,其余位按位取反就是反码)//00000000000000000000000000001110——左移1位后(左移后补0) 14。//补码:11111111111111111111111111111001 (反码加1就是补码)//00000000000000000000000000000111——补码 7。//00000000000000000000000000000111——补码 7。转载 2023-10-06 11:22:45 · 1533 阅读 · 0 评论 -
Linux中getopt函数、optind等变量使用详解
最近在学习《Unix网络编程》vol2时,发现书中例子经常使用一个命令行解析getopt函数,因为。该函数是由Unix标准库提供的函数,查看命令。,根据自己摸索,遂总结出使用方法。原创 2023-10-05 17:18:07 · 2627 阅读 · 0 评论 -
C语言中的函数openlog
这是标准的C语言系统头文件之一,用于日志记录功能。它不属于任何特定的包,而是属于C标准库(libc)的一部分。该头文件提供了在程序中使用系统日志(syslog)功能的相关函数和宏定义。函数可以设置日志选项并打开与系统日志相关联的连接。函数后,系统日志就会处于打开状态,之后可以使用。是一个系统日志函数,用于初始化系统日志功能。函数记录日志之前,通常需要调用。函数或其他相关函数记录日志。头文件,程序可以使用诸如。使用这个函数需要导入头文件。等函数来记录系统日志。函数来初始化系统日志。原创 2023-09-10 17:15:45 · 2987 阅读 · 0 评论 -
c语言中为什么函数传参大多数用指针类型
总的来说,指针类型参数可以实现对实参的修改和提高程序的效率。原创 2023-09-10 17:00:14 · 2101 阅读 · 0 评论 -
c语言中的argp_parse函数
在C语言中,argp_parse函数是argp库(命令行参数解析库)提供的函数之一,用于解析命令行参数并进行相应的处理。这就是一个使用argp_parse函数解析命令行参数的简单示例。在实际使用时,可以根据需求进一步定制选项和解析规则。函数返回值为0表示成功解析参数,非零值表示解析失败。原创 2023-09-10 16:58:06 · 2831 阅读 · 1 评论 -
libc和glibc有什么区别
libc(C Library)是一个常见的术语,指的是C语言的标准函数库,提供了许多函数和常量供C语言程序使用。在不同的操作系统中,libc可能是不同的,但是它们都实现了C语言的标准库函数。特性和功能:glibc相比于一些传统的libc实现来说,提供了更多的特性和功能,包括对国际化、线程安全、动态内存管理等方面的支持。glibc(GNU C Library)是一种常见的libc实现,是GNU项目的一部分。它是Linux系统中最常用的libc实现,也是许多其他基于Unix的操作系统所使用的。原创 2023-09-08 20:53:25 · 2027 阅读 · 0 评论 -
动态链接库是如何工作的
动态链接库是一种在操作系统中常用的可重复使用的软件库,类似的概念在Linux下是共享对象(Shared Object,简称SO)。动态链接库通过共享代码和数据的方式,提供了代码重用和模块化开发的机制。原创 2023-09-05 22:47:41 · 1177 阅读 · 0 评论 -
ld-linux-aarch64.so.1 这个是什么文件
动态链接器是一个系统组件,负责在程序运行时加载共享库(shared library)并解析它们的符号引用,以便程序能够正常执行。程序在运行时会使用动态链接器来查找和加载共享库,并将程序的符号引用与共享库中的符号进行关联。当出现与动态链接器相关的错误时,如符号未定义或版本不匹配等,程序的正常执行可能会受到影响。是一个动态链接器(dynamic linker)的文件,用于ARM 64位架构上的Linux系统。这个文件是GNU C库(glibc)提供的动态链接器的实现之一,它位于系统的标准库路径(如。原创 2023-05-16 20:13:09 · 5693 阅读 · 0 评论 -
有趣的 LD_PRELOAD
LD_PRELOAD 是 Linux 系统中的一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接库。如果你是个 Web 狗,你肯定知道 LD_PRELOAD,并且网上关于 LD_PRELOAD 的文章基本都是绕过 disable_functions,都快被写烂了。今天我们就从浅入深完整的学习一下什么是 LD_PRELOAD,LD_PRELOAD 有什么作用,我们可以如何利用 LD_PRELOAD。程序的链接主要有以下三种:对于动态链接来说,转载 2022-06-10 10:33:29 · 1679 阅读 · 0 评论 -
如何在Python中调用C语言代码
如何在Python中调用C语言代码_奇异空间里的猫的博客-优快云博客_python调用c1.使用C扩展CPython还为开发者实现了一个有趣的特性,使用Python可以轻松调用C代码开发者有三种方法可以在自己的Python代码中来调用C编写的函数:ctypes,SWIG,Python/C API。每种方式也都有各自的利弊。首先,我们要明确为什么要在Python中调用C?常见原因如下:你要提升代码的运行速度,而且你知道C要比Python快50倍以上 -C语言中有很多传统类库,而且有些转载 2022-05-18 10:15:20 · 10901 阅读 · 0 评论 -
在python里调用C函数的三种方式
一个python项目快速开发完以后,常常针对瓶颈进行优化,其中一种方式就是对于性能至关重要的部分,使用C重写,这已经是一种最佳实践。如果整个项目完全使用C,开发效率就没有保障。python运行环境(CPython)是用C开发的,因此python与C结合起来很容易,而且方式多种多样。使用C重写了关键部分后,需要在python中调用,本文介绍三种最常用的调用C函数的方式,分别是c extension,Cython和ctypes。举个例子,假设我们用C重写了add函数,它接受两个整数,计算他们的和并返回。原创 2022-05-17 19:59:57 · 8757 阅读 · 2 评论 -
哈希表基础知识
哈希表基础知识_zzu菜的博客-优快云博客_哈希表基础知识首先什么是 哈希表,哈希表(英文名字为Hash table,国内也有一些算法书籍翻译为散列表,大家看到这两个名称知道都是指hash table就可以了)。哈希表是根据关键码的值而直接进行访问的数据结构。这么这官方的解释可能有点懵,其实直白来讲其实数组就是一张哈希表。哈希表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素,如下图所示:那么哈希表能解决什么问题呢,一般哈希表都是用来快速判断一个元素是否出现集合里。例如转载 2022-05-16 19:13:37 · 196 阅读 · 0 评论 -
C 输入 & 输出
当我们提到输入时,这意味着要向程序填充一些数据。输入可以是以文件的形式或从命令行中进行。C 语言提供了一系列内置的函数来读取给定的输入,并根据需要填充到程序中。当我们提到输出时,这意味着要在屏幕上、打印机上或任意文件中显示一些数据。C 语言提供了一系列内置的函数来输出数据到计算机屏幕上和保存数据到文本文件或二进制文件中。标准文件C 语言把所有的设备都当作文件。所以设备(比如显示器)被处理的方式与文件相同。以下三个文件会在程序执行时自动打开,以便访问键盘和屏幕。标准文件 文件指针原创 2022-04-04 15:16:43 · 234 阅读 · 0 评论 -
利用strlen和sizeof求取字符串长度注意事项
首先,strlen是函数,sizeof是运算操作符,二者得到的结果类型为size_t,即unsigned int类型。大部分编译程序在编译的时候就把sizeof计算过了,而strlen的结果要在运行的时候才能计算出来。对于以下语句:char *str1 = "asdfgh";char str2[] = "asdfgh";char str3[8] = {'a', 's', 'd'};char str4[] = "as\0df";执行结果是:sizeof(str1) = 4; strle.转载 2022-04-04 14:17:58 · 198 阅读 · 0 评论 -
关于for循环中调用fork()系统调用的执行原理解析
关于for循环中调用fork()系统调用的执行原理解析_fan1570285527的博客-优快云博客关于for循环中调用fork()系统调用的执行原理解析该问题来源于操作系统概念(第九版)一书中的第三章的习题3.5,分析for循环中fork的执行原理1、预备知识2、题目解析3、剖析原理4、结论和意外发现4.1、结论:4.2、意外发现该问题来源于操作系统概念(第九版)一书中的第三章的习题3.5,分析for循环中fork的执行原理1、预备知识fork()系统调用原理:fork()转载 2022-03-24 15:57:47 · 1510 阅读 · 0 评论 -
理解C++中的左值和右值
一、前言一直以来,我都对C++中左值(lvalue)和右值(lvalue)的概念模糊不清。我认为是时候好好理解他们了,因为这些概念随着C++语言的进化变得越来越重要。二、左值和右值——一个友好的定义首先,让我们避开那些正式的定义。在C++中,一个左值是指向一个指定内存的东西。另一方面,右值就是不指向任何地方的东西。通常来说,右值是暂时和短命的,而左值则活的很久,因为他们以变量的形式(variable)存在。我们可以将左值看作为容器(container)而将右值看做容器中的事物。如果容器消失了,容原创 2022-03-21 19:52:55 · 718 阅读 · 0 评论 -
按位与、或、非、异或总结
位运算符有:&(按位与)、|(按位或)、^(按位异或)、~ (按位取反)。优先级从高到低,依次为~、&、^、|1.按位与操作 0&0=0; 0&1=0; 1&0=0; 1&1=1例子:10&9: 0000 1010 & 0000 1001 = 0000 1000 = 8负数按补码形式参加按位与运算“与运算”的特殊用途: (1)清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。.转载 2022-03-19 16:00:05 · 1731 阅读 · 0 评论 -
typedef函数指针
由于之前学习C++这块内容并没有经过太多实践,这块内容已经忘记了不少,现在学到动态库用到这块内容,又重新整理了。接下来的几天将会学习更多的动态库静态库的知识,学完之快内容之后,就学习excel等office方面编程技术! 常规的函数指针是这样定义的:////这里有一个函数体fun1void fun1(int a){ return a*3;}//////这里定义了一个函数指针pfun1void (*pfun1)(int);///////这里的pfun1就可以指向fun1函数了原创 2022-03-19 14:36:31 · 1676 阅读 · 0 评论 -
函数指针和指针函数用法和区别
前言函数指针和指针函数,在学习 C 语言的时候遇到这两个东西简直头疼,当然还有更头疼的,比如什么函数指针函数、指针函数指针、数组指针、指针数组、函数指针数组等等,描述越长其定义就越复杂,当然理解起来就越难,特别是刚开始学习这门语言的童鞋,估计碰到这些东西就已经要崩溃了,然后好不容易死记硬背下来应付考试或者面试,然后过了几天发现,又是根本不会用,也不知道该在哪些地方用,这就尴尬了。今天这里只讲两个相对简单的,其实上面说那些太复杂的东西也真的很少用,即便是用了理解起来很麻烦,所以莫不如先深刻理解这两个比较转载 2022-03-19 14:18:10 · 2193 阅读 · 0 评论 -
【C语言】- static和extern关键字 - 对函数的作用
不同类型的变量有不同的存储类型、不同的生命周期、不同的作用域。这篇小文介绍2个比较重要的关键字:static和extern。static和extern不仅可以用在变量上,还可以用在函数上。这讲先介绍它们对函数的作用。一、extern与函数之前我提到过一句话:如果一个程序中有多个源文件(.c),编译成功会生成对应的多个目标文件(.obj),这些目标文件还不能单独运行,因为这些目标文件之间可能会有关联,比如a.obj可能会调用c.obj中定义的一个函数。将这些相关联的目标文件链接在一起后才能生成可执转载 2022-03-18 21:14:37 · 764 阅读 · 1 评论 -
C语言的内联函数的作用
内联函数在编译层面类似于宏替换。也就是说,程序执行过程中调用内联函数不需要入栈出栈,所以效率会提高。原创 2022-03-18 20:56:38 · 353 阅读 · 0 评论 -
C++ 取指针地址
void main(){ int a = 100; int *ap = &a; printf("%p\n",&a);//输出:002AF744 printf("%p\n",ap);//输出:002AF744 printf("%d\n",*ap);//输出:100 printf("%p\n",&ap);//输出:002AF738 printf("%p\n",&*ap);//输出:002AF744...原创 2022-03-18 17:17:59 · 5184 阅读 · 0 评论 -
感觉 C++ 很简单,但为何这么多劝退的?
上一个说C++简单的,已经被面试官问死了...那些面试官最喜欢的就是你在简历上写“精通”或者“熟练掌握”几个字。。。我以前也以为自己学明白了,后来经历的面试越多越觉得自己没学明白。哦不,不是没学明白,是没学清楚!腾讯的面试官就贼喜欢问C++基础部分,字节的还好....所以在我以前通过校招上岸字节跳动后,将我自己的秋招找工作认真总结,并且开源在github上了。这份笔记包括C/C++、操作系统、计算机网络、数据库(MySQL、Redis)、常见情景题、智力题以及计算机面试中需要注意的问题。转载 2022-03-03 11:48:48 · 1244 阅读 · 1 评论 -
C++中Struct与Class的区别与比较
概述之前只知道在C++中类和结构体的区别只有默认的防控属性(访问控制)不同,struct是public的,而class是private的。但经过上网查资料才发现,除了这个不同之外,还有很多的知识点需要掌握。下面就听我一一道来~1、首先比较一下C中的结构体和C++中的结构体区别C++中的struct是对C中的struct进行了扩充,所以增加了很多功能,主要的区别如下图所示:上面罗列了在声明时的区别,在使用的过程中也有区别:在C中使用结构体时需要加上struct,或者对结构体使用typedef转载 2022-03-01 21:50:30 · 395 阅读 · 0 评论 -
C++类中静态变量和静态方法使用介绍
静态成员的提出是为了解决数据共享的问题。实现共享有许多方法,如:设置全局性的变量或对象是一种方法。但是,全局变量或对象是有局限性的。这一章里,我们主要讲述类的静态成员来实现数据的共享。 静态数据成员 在类中,静态成员可以实现多个对象之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则,即保证了安全性。因此,静态成员是类的所有对象中共享的成员,而不是某个对象的成员。 使用静态数据成员可以节省内存,因为它是所有对象所公有的,因此,对多个对象来说,静态数据成员只存储一处,供所有对象共用。静态原创 2022-02-28 16:39:13 · 1876 阅读 · 0 评论 -
深入思考全局静态存储区、堆区和栈区
在C++中,内存可分为系统数据区,自由存储区,文本区,const数据区,全局静态区,堆区和栈区。其中,系统数据区存放的是系统数据,我们是不能自由访问的,有时候windows系统会突然弹出一个消息框,内容是“内存不能为read”就是错误访问系统数据区的结果;自由存储区用来存放由C延伸而来的malloc()函数所分配的数据;文本区存放着我们的函数代码,我们调用函数时的底层行为就类似于先去操作一个指针,而这个指针就指向函数指令所在的地址,也就是在文本区中;const数据区,顾名思义,就是存放不可修...原创 2022-02-28 16:00:08 · 844 阅读 · 0 评论 -
C++的static关键字,变量存储位置
今天看博文时,看到了c++的static关键字的一些总结,还涉及到了一些代码的存储位置,为了有时间的时候能够看一下,还是自己把它给摘抄下来吧。C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。一、面向过程设计中的static1、静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下://..原创 2022-02-28 15:59:06 · 1656 阅读 · 0 评论 -
C++应用程序性能优化——操作系统内存管理
1. 工作集:概念:操作系统中驻留在物理内存中的内存页成为进程的工作集。工作集的大小:操作系统为每个进程定义了最小工作集(20-50MB),和最大工作集(45-345MB)(具体与系统的物理内存大小有关)工作集的增长:当执行到未被调入内存的代码页或数据页时,这些页会被调入内存,工作集随之增长。当工作集达到最大工作集,进程需要再次调入新页到物理内存时,虚拟内存管理器会将原来工作集中某些页置换出内存,把需要调入的新页调入内存。访问内存的性能:工作集中的内存驻留在物理内存中,因转载 2022-02-07 17:27:29 · 425 阅读 · 0 评论 -
详解C/C++中volatile关键字
一、volatile介绍volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序:这段程序等待内存变量flag的值变为1(怀疑此处是0,有点疑问,)之后才运行do2()。变量flag的值由别的程序更原创 2022-01-29 23:29:04 · 4981 阅读 · 0 评论 -
C++ 之namespace常见用法
namespace通常用来给类或者函数做个区间定义,以使编译器能准确定位到适合的类或者函数。譬如说,自行实现了一个函数test(void),而在该项目的库函数内也定义了一个函数test(void);当你调用test();函数的时候,编译器就困惑了,该调用哪个呢?这个时候namespace的作用就显现出来了。namespace的定义用法:namespace namespace_name { // code declarations // 函数,类名等等}namespace对应原创 2021-11-23 19:53:23 · 685 阅读 · 0 评论 -
#pragma once用法总结
1.#pragmaonce这个宏有什么作用?为了避免同一个头文件被包含(include)多次,C/C++中有两种宏实现方式:一种是#ifndef方式;另一种是#pragma once方式。在能够支持这两种方式的编译器上,二者并没有太大的区别。但两者仍然有一些细微的区别。2.两者的使用方式有何区别?示例代码如下:方式一:#ifndef__SOMEFILE_H__#define __SOMEFILE_H__... ... // 声明、定义语句#endif...原创 2021-11-23 19:44:29 · 1164 阅读 · 0 评论 -
常用正则表达式最强整理(速查手册)
一、校验数字的表达式 数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$ 零和非零开头的数字:^(0|[1-9][0-9]*)$ 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$ 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$ 正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$原创 2021-07-08 10:20:12 · 103 阅读 · 0 评论 -
c++ map查找key
1、在map中,由key查找value时,首先要判断map中是否包含key。2、如果不检查,直接返回map[key],可能会出现意想不到的行为。如果map包含key,没有问题,如果map不包含key,使用下标有一个危险的副作用,会在map中插入一个key的元素,value取默认值,返回value。也就是说,map[key]不可能返回null。3、map提供了两种方式,查看是否包含key,m.count(key),m.find(key)。4、m.count(key):由于map不包含重复的key,原创 2021-07-07 12:01:24 · 5320 阅读 · 0 评论 -
编译:一个 C 程序的艺术之旅
C 程序为什么要编译才能执行?一个 C 程序在变成可执行文件的过程中,为什么要经过预处理、编译、汇编、链接这四道工序?让我们从这段简单的 C 程序开始。为什么要编译这并不是一个简单的问题。我们知道 Python 代码不需要 “编译”,输入一行代码就可以运行出结果了,对用户很友好有木有!这种交互式的运行环境被称为 REPL(Read-Evaluate-Print-Loop),也就是读取用户输入的语句,执行语句,输出语句的值,再返回到等待输入状态。C 语言为什么不能用这种交互式的 REPL转载 2020-12-04 09:47:57 · 280 阅读 · 0 评论 -
setlocale()函数详解——C语言
etlocale函数函数原型:char* setlocale (int category, const char* locale);setlocale位于头文件,setlocale() 函数既可以用来对当前程序进行地域设置(本地设置、区域设置),也可以用来获取当前程序的地域设置信息,使用setlocale需要两个参数第一个参数category:用来设置地域设置的影响范围。地域设置包含日期格式、数字格式、货币格式、字符处理、字符比较等多个方面的内容,当前的地域设置可以只影响某一方面的内容.原创 2020-11-26 20:25:36 · 2432 阅读 · 0 评论 -
strcpy和strdup比较和详解
strcpy和strdup比较和详解函数和功能描述:①extern char *strdup(char *s);头文件:string.h功能: 将串拷贝到新建的位置处说 明:strdup不是标准的c函数。strdup()在内部调用了malloc()为变量分配内存,不需要使用返回的字符串时,需要用free()释放相应的内存空间,否则会造成内存泄漏。返回值:返回一个指针,指向为复制字符串分配的空间;如果分配空间失败,则返回NULL值。//strdup.c#include&...转载 2020-11-26 20:20:12 · 350 阅读 · 0 评论 -
Class和类名称之间的宏定义作用
#if defined __DRAW_IMPL__ #if(defined_AFXDLL&&!defined__STAT_WITH_DLLMFC__) #define__DRAW_API_declspec(dllexport) #else #define__DRAW_API #endif//_AFXDLL#else #if(defined_AFXDLL&&!def...转载 2020-11-25 11:37:11 · 3116 阅读 · 0 评论 -
C++11 左值、右值、右值引用详解
左值、右值在C++11中所有的值必属于左值、右值两者之一,右值又可以细分为纯右值、将亡值。在C++11中可以取地址的、有名字的就是左值,反之,不能取地址的、没有名字的就是右值(将亡值或纯右值)。举个例子,int a = b+c, a 就是左值,其有变量名为a,通过&a可以获取该变量的地址;表达式b+c、函数int func()的返回值是右值,在其被赋值给某一变量前,我们不能通过变量名找到它,&(b+c)这样的操作则不会通过编译。右值、将亡值在理解C++11的右值前,先看看C++98中右值原创 2020-11-20 16:36:16 · 263 阅读 · 0 评论 -
用C++封装线程池
先上代码,代码来自GitHub。这段代码用了大量C++ 11新特性,并且非常晦涩难懂,接下来会对每个细节逐个解释。ThreadPool.h#ifndef THREAD_POOL_H#define THREAD_POOL_H#include <vector>#include <queue>#include <memory>#include <thread>#include <mutex>#include <condit转载 2020-11-20 14:19:49 · 1308 阅读 · 1 评论 -
信号量及PV操作
无论是大部分的教材上的信号量,还是博客中的信号量,基本上解说都是类似下面这种,给出几个不同的信号量种类然后加一点说明,完全不能理解信号量的PV操作。5.2 信号量机制https://www.jianshu.com/p/93128a6cb0f0在搜索过程中我找到了这个操作系统原理(Operating Systems)https://www.coursera.org/learn/os-pku这个网站em。。基本打不开,所以使用华文慕课。这个是北大自己办的网站,上面有这个课程,登录后可以下载课件。ht原创 2020-11-17 09:58:43 · 2313 阅读 · 0 评论