
C语言进阶系列
文章平均质量分 54
C语言进阶系列
Android系统攻城狮
《Android系统多媒体进阶实战》一书作者
展开
-
C语言之10进制和16进制相互转换(五十七)
本篇目的:为什么要介绍这个?因为10进制和16进制在编码中最常用,举两个简单的例子。16进制(Hexadecimal)和10进制(Decimal)是两种常见的数值表示方法,各自在不同的领域有着广泛的应用。10进制,又称为十进制,是我们日常生活中最常用的数值系统。它以10为基数,由0到9共10个数字组成。在这个系统中,每一位的值都取决于其位置和对应的权重。例如,数字 345 表示 3 × 100 + 4 × 10 + 5 × 1,即 300 + 40 + 5 = 345。原创 2024-08-11 12:56:27 · 907 阅读 · 0 评论 -
C语言之unsigned long long与struct相互转换实例(五十六)
本篇目的:C语言之unsigned long long与struct相互转换实例是一种数据类型,用于表示无符号的64位整数。而struct是一种构造数据类型,可以将多个不同类型的数据项组合成一个单一的复合类型。在C/C++中,将与struct相互转换通常涉及到位操作和内存布局的考虑。原创 2024-08-04 08:30:00 · 679 阅读 · 0 评论 -
C语言之unsigned long long与指针相互转换实例(五十五)
本篇目的:C语言之unsigned long long与指针相互转换实例在C和C++等编程语言中,与指针类型之间可以直接相互转换,这是因为它们在底层有着相似的表示方式。以下将详细介绍这种转换的可行性及其背后的原因。首先,指针的本质是内存地址。在大多数现代计算机系统中,内存被组织为一个线性地址空间,每个内存地址对应一个唯一的位置。指针变量存储的是内存中某个对象的地址。在32位系统中,指针通常占用4个字节(32位)。而在64位系统中,指针则占用8个字节(64位)。原创 2024-08-02 08:30:00 · 1464 阅读 · 0 评论 -
C11之重要特性及用法实例(五十四)
本篇目的:C11之重要特性及用法实例C11标准,全称为ISO/IEC 9899:2011,是C语言的最新国际标准,于2011年发布,旨在取代C99标准。C11标准在保持与C99标准兼容的基础上,进一步扩展了C语言的功能,增强了安全性、稳定性和国际化支持。以下是C11标准的主要特点和介绍:多线程支持:C11标准首次在C语言的核心标准中引入了多线程编程的支持,通过头文件提供了线程创建、同步和互斥等基本操作,使得C语言能够更好地适应多核处理器时代的需求。增强的原子操作:C11标准增加了。原创 2024-07-27 09:30:00 · 927 阅读 · 0 评论 -
C99之重要特性及用法实例(五十三)
本篇目的:C99之重要特性及用法实例C99标准,全称为ISO/IEC 9899:1999,是C语言的一个重要国际标准,它在1999年正式发布,旨在取代之前的C90标准。C99标准在保留C语言核心特性的同时,引入了一系列新特性和改进,使得C语言更加现代化和强大。以下是C99标准的主要特点和介绍:变量声明位置:C99标准允许在代码块的任何位置进行变量声明,而不仅仅是在开始处。这一改变提高了代码的灵活性和可读性。复合字面量。原创 2024-07-27 09:30:00 · 862 阅读 · 0 评论 -
C95之重要特性及用法实例(五十二)
本篇目的:C95之重要特性及用法实例C95标准,通常指的是ISO/IEC 9899:1995,这是一个对C90标准的修订版,它并不像C99标准那样引入了大量新特性,而是主要关注于技术上的修正和小的改进。C95标准并没有被广泛认可,而且在正式文档中并不存在“C95”这样的称呼,它通常被称为C90 Amendment 1或者C95修正版。以下是对C95标准的一些介绍:技术修正:C95标准主要对C90标准中的技术错误进行了修正,这些修正可能涉及到了标准的文本描述、示例代码或者一些细节上的规定。原创 2024-07-26 09:00:00 · 1854 阅读 · 0 评论 -
C90之重要特性及用法实例(五十一)
本篇目的:C90之重要特性及用法实例C90标准,全称为ISO/IEC 9899:1990,是国际标准化组织(ISO)和国际电工委员会(IEC)于1990年发布的一个国际标准,它定义了C语言的标准规范。C90标准是C语言发展史上的一个重要里程碑,它为C语言的语法、语义和标准库等方面提供了统一的规定,使得C语言在不同平台和编译器之间具有良好的可移植性。C90标准的主要特点如下:语法规范:C90标准对C语言的语法进行了详细的规定,包括变量声明、数据类型、运算符、表达式、语句、函数定义等。原创 2024-07-26 08:30:00 · 912 阅读 · 0 评论 -
C语言之位域:用法实例(五十)
本篇目的:C语言之位域:用法实例C语言的位域(Bit Field)是C语言的一个特性,它允许程序员在整数变量中定义一组位,并将这些位划分为不同的域。每个域可以单独访问和修改,而不需要进行复杂的位操作。位域的使用可以提高代码的可读性和效率,同时减少内存的使用。位域的使用是通过struct类型来定义的。在struct中,每个成员都对应一个整数类型的变量,而成员的宽度则指定为该成员所占的位数。这样,整数类型的变量中的每一位都可以被划分成一个独立的域,每个域都可以通过点操作符来访问和修改。原创 2024-05-23 18:23:06 · 778 阅读 · 0 评论 -
C语言之解决C90:声明与代码混用问题(四十九)
本篇目的:C语言之解决C90:声明与代码混用问题C90代码是指遵循1990年发布的C语言标准(ISO/IEC 9899:1990),也被称为C90或C99之前的C语言标准。在这个标准中,有一项重要的规定是关于变量声明和代码混用的问题。在C90标准中,变量的声明和代码的编写是分开的,声明必须在代码执行之前完成。这意味着,在使用变量之前,必须先进行声明。然而,在实际的编程实践中,我们经常会遇到需要在代码中同时声明和编写的情况。为了解决这个问题,C99标准引入了一种新的声明方式——变量的初始化声明。原创 2024-05-21 11:09:36 · 1127 阅读 · 0 评论 -
C语言之回调函数+可变参数__VA_ARGS__:用法实例(四十八)
本篇目的:C语言之回调函数+可变参数:用法实例在C语言中,是一个可变参数宏的示例,它允许开发者调用一个函数FUNC,并将可变数量的参数传递给它。这种机制在C语言的标准库中非常常见,尤其是在处理像printf这样的函数时,它们可以接受不同数量和类型的参数。原创 2024-04-25 04:00:00 · 969 阅读 · 0 评论 -
C语言之aligned用法实例(四十七)
本篇目的:Linux内核之aligned用法实例在Linux内核中,aligned关键字是一个编译器指令,它用于指定变量或结构体的对齐方式。对齐是指变量或结构体在内存中的起始地址与某个数的倍数对齐。对齐对于性能至关重要,特别是在处理对齐敏感的数据类型(如浮点数)或使用SIMD指令时。正确的对齐可以减少内存访问时间,提高程序的性能。在Linux内核中,aligned关键字通常与一起使用,其中n是一个整数,指定了对齐边界。n必须是2的幂,因为大多数处理器和内存系统都对齐到2的幂边界上的地址。原创 2024-04-17 05:00:00 · 1289 阅读 · 0 评论 -
C语言之探秘:访问结构体空指针与结构体空指针的地址的区别(九十三)
本篇目的:C语言之探秘:访问结构体空指针与结构体空指针的地址的区别在C语言中,结构体(Struct)是一种复合数据类型,它可以包含多个不同类型的数据项。指针(Pointer)是一种特殊的数据类型,用于存储变量地址。空指针(Null Pointer)是一个不指向任何有效内存地址的特殊指针。当我们谈论结构体空指针与结构体空指针的地址时,我们需要明确两个概念:结构体变量的地址和结构体指针的地址。结构体空指针:结构体空指针是指未经初始化的结构体指针,它不指向任何有效的内存地址。在C语言中,我们可以使用。原创 2024-04-16 04:30:00 · 1136 阅读 · 0 评论 -
C语言之哈希表节点插入与遍历学习(九十二)
本篇目的:C语言之哈希表节点插入与遍历学习哈希表(Hash Table)是一种数据结构,用于存储键值对(Key-Value Pair)的集合。它通过哈希函数将键映射到表中的一个位置,以加快查找速度。在哈希表中,数据是以数组的形式存储的,数组的索引是通过哈希函数计算得出的。哈希表的核心思想是将键通过哈希函数转换为一个整数值,然后将这个整数值作为数组索引,将对应的值存储在数组中。当我们想要查找一个键对应的值时,只需要再次使用哈希函数计算数组索引,然后直接访问数组中的对应位置即可。原创 2024-04-15 06:00:00 · 1001 阅读 · 0 评论 -
C语言之offsetof实现分析(九十一)
本篇目的:C语言之offsetof实现分析C语言中的offsetof宏是一个非常有用的工具,它用于计算结构体中某个成员相对于结构体开头的偏移量。这个宏定义在头文件中,它是C标准库的一部分。offsetof宏的使用方法非常简单,它的原型如下:其中,type是一个结构体类型,member是type结构体中的一个成员。offsetof宏的返回值是member成员相对于type结构体开头的字节偏移量。原创 2024-04-15 04:45:00 · 969 阅读 · 0 评论 -
C语言之typeof用法实例(九十二)
本篇目的:C语言之typeof用法实例C语言的typeof运算符是一个编译时运算符,它用于获取表达式的类型。这个运算符是由GCC扩展引入的,不是标准C语言的一部分。typeof运算符允许我们在编写泛型代码时避免硬编码特定的数据类型,从而提高代码的灵活性和可重用性。typeof运算符的基本形式如下:其中expr是任何有效的C语言表达式。typeof运算符将返回expr的类型,这个类型可以用于定义新的变量、函数参数或者作为类型转换的目标类型。typeof运算符的一个主要优点是它提供了类型推断的能力。原创 2024-04-14 06:15:00 · 1273 阅读 · 0 评论 -
C语言之_Generic用法实例(九十一)
本篇目的:C语言之_Generic用法实例C语言的_Generic表达式是C11标准引入的一个特性,它提供了一种在编译时基于表达式类型选择函数或值的方法。这种机制与C++中的模板元编程相似,但更为简单和受限。_Generic表达式的基本形式如下:其中expr是我们要判断的表达式,是可能的类型,是对应的类型为真时返回的值,是默认返回的值(当没有任何类型匹配时)。_Generic表达式的基本思想是,根据expr的类型,从多个候选值中选择一个。这种选择是在编译时进行的,因此_Generic。原创 2024-04-14 05:15:00 · 1443 阅读 · 0 评论 -
C语言之结构体初始化10种写法总结(九十)
本篇目的:C之结构体初始化10种写法总结。原创 2024-04-04 05:45:00 · 1388 阅读 · 0 评论 -
C语言之指针的指向地址和指针的内容总结(八十九)
本篇目的:C语言之指针的指向和指针的内容总结C语言中的指针,可以说是其最具特色且最具挑战性的部分。指针在C语言中起着至关重要的作用,它允许我们直接访问内存地址,并对存储在那些地址中的数据进行操作。下面,我们将对C语言中的指针进行详细的介绍。首先,我们需要明白指针是什么。在C语言中,指针是一个变量,其值为另一个变量的地址,即内存位置的直接地址。通过指针,我们可以直接访问和修改存储在特定内存地址中的数据,这使得我们能够进行诸如动态内存分配、函数参数传递等高级操作。其次,使用指针可以带来许多便利。原创 2024-04-02 07:15:00 · 1211 阅读 · 0 评论 -
C语言之Linux内核回调函数写法(八十九)
本篇目的:在阅读内核源码时,发现内核代码写的回调函数竟然都没有任何的修饰,随即分享给大家。回调函数(Callback Function)是计算机编程中的一个常用概念,特别是在面向对象编程和函数式编程中。简单来说,回调函数是一种将函数作为参数传递给另一个函数,并在适当的时候执行该函数的机制。回调函数通常用于实现事件驱动编程、异步编程和装饰器模式等。回调函数的概念最早可以追溯到20世纪50年代的函数式编程语言。在函数式编程中,回调函数被广泛使用,因为它使得函数的组合变得容易。原创 2024-04-01 06:15:00 · 1059 阅读 · 0 评论 -
C语言之strchr用法实例(八十八)
本篇目的:C语言之strchr用法实例。strchr 函数是 C 标准库 中的一个字符串处理函数,其作用是在一个字符串中查找指定字符的第一个匹配位置,并返回该位置的指针。其中:str 是要进行查找的字符串。c 是要查找的字符。strchr 函数会返回字符串 str 中第一次出现字符 c 的位置指针,如果找到了该字符,则返回其位置的指针;如果未找到该字符,则返回 NULL。原创 2024-03-22 13:59:07 · 604 阅读 · 0 评论 -
C语言之strcspn用法实例(八十七)
本篇目的:C语言之strcspn用法实例Linux 系统中的strcspn函数是一个非常有用的 C 语言库函数,主要用于字符串操作。该函数在处理字符串时提供了很多灵活性,尤其是在确定字符串中未设置字符的起始位置方面非常有用。strcspn函数的原型定义在头文件中,其原型如下:这个函数的作用是在字符串str中搜索由reject所指定的字符集合的所有出现,并返回这些字符在str中首次出现之前的字符数(不包括 -reject中的字符)。简单来说,strcspn函数会计算str。原创 2024-03-22 11:41:51 · 2141 阅读 · 0 评论 -
C语言之strsep用法实例(八十六)
本篇目的:C语言之strsep用法实例strsep 函数是 C 语言标准库中的一个函数,用于在字符串中查找并分割子串。该函数在处理由特定分隔符分隔的字符串时非常有用,常见于处理 CSV 文件、命令行参数等场景。strsep 函数接受两个参数:一个是指向要分割字符串的指针的指针,另一个是指向分隔符字符串的指针。在每次调用时,strsep 会从原字符串中查找第一个分隔符,将找到的子串与后续部分分离开来,并返回指向子串的指针。同时,它会更新传入的指针,使其指向原字符串中剩余的部分。原创 2024-03-21 17:25:23 · 2306 阅读 · 0 评论 -
C语言之mkdtemp()特定占位符:XXXXXX 用法实例(八十五)
本篇目的:C语言之mkdtemp()固定占位符"XXXXXX"用法实例Linux 系统中的 mkdtemp 函数是一个非常有用的 C 语言函数,用于创建一个临时目录。这个函数可以简化开发过程,特别是在需要频繁创建临时目录的情况下。在本文中,我们将介绍 mkdtemp 函数的基本概念、用法和返回值。基本概念mkdtemp 函数定义在 unistd.h 头文件中,其作用是根据给定的模板字符串创建一个临时目录。这个目录会被创建在全局目录 /tmp 中,除非设置了环境变量 TMPDIR。原创 2024-02-23 17:53:35 · 1481 阅读 · 0 评论 -
C语言之指针的地址和指向的内容总结(八十四)
本篇目的:C语言之指针的地址和指向的内容总结与用法。C语言中的指针是一个非常重要的概念,它涉及到内存地址和数据内容的访问。在C语言中,指针变量可以存储其他变量的地址,通过指针我们可以直接访问内存中的数据。本篇文章将对C语言中指针的地址和指向的内容进行总结。首先,我们需要明确指针的两个基本概念:地址和指针变量。在计算机中,每个变量都占用一段内存空间,这个内存空间有一个唯一的地址。指针变量是一个特殊类型的变量,它的值为内存地址。通过指针变量,我们可以找到内存中对应的数据。原创 2024-01-26 10:47:11 · 963 阅读 · 0 评论 -
C语言之pthread_once实例总结(八十三)
本篇目的:理解pthread_once函数用法函数是POSIX线程库中的一个函数,用于在单线程环境中进行线程安全的初始化。该函数确保仅在第一次调用时执行给定的初始化代码,而不会重复执行。这对于需要在程序启动时进行初始化,但只执行一次的操作非常有用。函数保证函数在多线程环境下只被调用一次。是一个用来控制函数是否被调用的控制变量。是需要保证只调用一次的函数。如果函数成功执行,返回0。如果函数失败,返回一个非零值。使用。原创 2023-11-08 13:28:14 · 719 阅读 · 0 评论 -
C语言之extern关键字实例总结(八十二)
本篇目的:理解extern关键字用法在C++中,extern关键字通常用于链接定义在别处声明的变量或函数。extern有两个主要的用法:在函数前使用时,它允许在文件之间调用外部函数;在变量前使用时,它允许在不同的编译单元中引用变量。如果你有一个函数在一个文件中被声明,但在另一个文件中被定义,那么你可以使用extern "C"来告诉编译器这个函数应该按照C语言的方式进行链接。原创 2023-11-08 13:08:48 · 210 阅读 · 0 评论 -
C语言之feof与fgetc应用实例(八十一)
本篇目的: Linux平台C语言中feof函数表示是否已经到达文件的末尾,fgetc函数可以通过读取每个字符来判断。feof函数在C语言中的返回值是int类型,表示是否已经到达文件的末尾。如果上一次读取操作成功,但已经到达了文件末尾,则feof函数返回0(false)。如果上一次读取操作导致了读取错误(包括文件结束时的读取错误),则feof函数返回非零值(true)。当feof函数返回0时,表示文件指针并没有到达文件的末尾,还可以继续进行读取操作。原创 2023-08-18 15:15:22 · 281 阅读 · 5 评论 -
C语言之pthread_cond_t信号变化探究总结(八十)
本篇目的: 理解pthread_cond_wait与pthread_cond_timedwait用法区别函数区别与pthread_cond_signal函数成对出现,如果没有pthread_cond_signal给它发信号,它死等,等到天荒地老…自己设置超时时间,一旦超过设定时间,自动执行pthread_cond_timedwait函数后边的代码。如果pthread_cond_signal在pthread_cond_timedwait 设置超时时间之前给它发信号,它会收到信号,提前结束等待。原创 2023-07-29 16:27:53 · 467 阅读 · 0 评论 -
C语言之调用宏函数技巧(七十九)
本篇目的:通过一个例子,认识宏函数如何传参及调用。原创 2023-05-30 01:06:02 · 469 阅读 · 0 评论 -
C语言之再讲pthread_cond_wait与pthread_cond_timedwait区别(七十八)
本篇目的: 理解pthread_cond_wait与pthread_cond_timedwait用法区别原创 2023-05-17 12:03:09 · 465 阅读 · 0 评论 -
C语言之container_of原理单步拆解(七十七)
container_of主要在linux内核代码中使用,但是也不妨碍我们来研究它。container_of的主要作用:通过成员变量的地址,来获取结构体的地址。原创 2023-04-21 15:51:25 · 288 阅读 · 0 评论 -
C语言之系统函数offsetof偏移原理拆解(七十六)
在C/C++中,offsetof作为系统函数,它的作用是输入结构体和成员变量,推断出当前成员变量的偏移量。原创 2023-04-21 14:47:34 · 588 阅读 · 0 评论 -
C语言之typeof关键字高级用法(七十五)
typeof() 函数是GUN C提供的一种特性,它的作用取得变量的类型,或者表达式的类型。原创 2023-04-21 14:03:00 · 447 阅读 · 0 评论 -
C语言之结构体相减的本质(七十四)
结构体元素相减是和指针相减、数组元素相减其实是一回事,本质是地址为基础运算操作。以shortt类型说明,如果向前/后移动1个2字节,就说位移一位,如果向前/后移动2个2字节,则说移动2位。更多原创,欢迎关注:Android系统攻城狮Android系统攻城狮Audio工程师进阶系列。原创 2023-04-20 01:24:13 · 616 阅读 · 0 评论 -
C语言反码和按位取反~区别(七十三)
正数的反码和按位取反。原创 2023-03-25 01:07:37 · 126 阅读 · 0 评论 -
C语言之~1为什么等于-2(七十二)
计算机并不直接存储二进制原码,而是存储二进制的补码。比如1,原码0000 0001,补码也为0000 0001。而计算机不直接存储负数,而是存储负数的补码,负数的补码计算规则是"在计算机内存中,负数以补码形式存在(即取反,再加一)。步骤2:因为1的补码是负数,所以要还原其原码在输出;补码转换原码的规则:符号不变,先减一,再取反。负数转换补码的规则:取反,再加一,符号不变。所以补码转原码的规则是:先减一,再取反。因为原码转补码的规则是:先取反,再加一。步骤1:首先计算出1的补码,即它本身。原创 2023-03-24 23:48:59 · 2870 阅读 · 0 评论 -
C语言之按位取反~(七十一)
补码运算(即按位取反,并加一操作)原创 2023-03-24 22:53:19 · 1412 阅读 · 0 评论 -
C语言之struct n层嵌套总结(七十)
一般结构体嵌套情况两层就能解决很多问题,但是有的嵌套特别深,但是父结构体存储子结构体的对象,子结构体又是父结构体的首地址,如果多层这么嵌套下去,如何使用第一层的对象来访问第n层的成员变量,带着这样的一个疑问出发。原创 2023-03-22 01:00:00 · 612 阅读 · 0 评论 -
C语言小技巧(六十九)
C语言小技巧(六十九)原创 2023-02-25 16:35:47 · 149 阅读 · 0 评论 -
C语言之lseek64报Invalid argument根本原因(六十八)
如果传入的是(1ull原创 2023-02-16 00:48:07 · 1438 阅读 · 0 评论