C语言
文章平均质量分 65
Nerazzur
这个作者很懒,什么都没留下…
展开
-
C语言拾遗
C语言拾遗,用了这么多年的c语言,发现很多地方还是不知道,不少地方还是似是而非原创 2024-04-05 14:39:10 · 290 阅读 · 0 评论 -
c拾遗-二级指针、数组内函数
1、c语言中二级指针用途1:一般被用在多维数组的环境中,一个二级指针可以指向一个二维数组;用途2:二级指针作为函数参数使用时,可以通过函数修改实参指针值的目的。原创 2022-12-16 18:39:17 · 483 阅读 · 0 评论 -
c语言中的0、‘0’、‘\0’、“0”及NULL
c语言中的0、‘0’、‘\0’、“0”及NULLASCII表字符的表示方法:①单引号表示法:例如 ‘A’②十进制表示法:直接使用该字符在ASCII表中的序号(即十进制值),例如65③转义字符表示:使用 ‘\index’,其中index为该字符在ASCII表中的(八进制或16进制)值,例如 ’\101’(八进制)和 ’\0x41’(16进制)。使用该方法时,\ 后面的字符值只能使用该字符在ASCII表中的八进制值和16进制值,且默认使用八进制;使用16进制需要在 \ 后面加0x。上面的’A’、65、原创 2022-04-20 22:20:52 · 4341 阅读 · 1 评论 -
C语言调用so动态库的两种方式
方式1:类似静态库的调用(使用头文件)这种方式生成的程序会在启动时候就加载so动态库。add.hint add(int x, int y);add.c#include "add.h"int add(int x, int y) { return (x + y);}main.c#include <stdio.h>#include "add.h"int main(){ int sum = add(7, 8); printf("7+转载 2020-12-11 23:16:03 · 4071 阅读 · 1 评论 -
C语言localtime和asctime时间函数中的陷阱
晚上调试程序,碰到一个奇怪的问题:在程序的多个地方调用了time和localtime函数获得当前系统时间,然后在程序运行结束后一次性打印程序前面几次获得的系统时间,但是打印出来的几处时间居然都是最后一个时刻的时间。后来尝试把每次获得的时间通过本地变量保存一份,统一打印的时候打印本地保存的变量值,才能输出期望的结果。关于这个问题在网上找到了一篇解释:在编写C语言的应用程序时,为了获取或者打印一些跟时间有关的信息,我们经常会使用到C语言自带的一些时间函数,诸如:time、localtime、ctim转载 2020-11-26 23:18:09 · 960 阅读 · 0 评论 -
c语言中sizeof详解
解析C语言中的sizeof一、sizeof的概念sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。二、sizeof的使用方法1、用于数据类型 sizeof使用形式:sizeof(type) 数据类型必须用括号括住。如sizeof(int)。2、用于变量 sizeof使用形式:sizeof(var_name)或..原创 2020-10-15 23:55:19 · 131288 阅读 · 4 评论 -
C语言函数隐式声明(2)
1 什么是C语言的隐式函数声明在C语言中,函数在调用前不一定非要声明。如果没有声明,那么编译器会自动按照一种隐式声明的规则,为调用函数的C代码产生汇编代码。下面是一个例子:int main(int argc, char** argv){ double x = any_name_function(); return 0;}单纯的编译上述源代码,并没有任何报...转载 2018-12-27 19:28:15 · 599 阅读 · 0 评论 -
C语言函数隐式声明——implicit declaration warning
implicit declaration of function——函数隐式声明警告原因:1、该函数未被声明,但却被调用了,此时gcc会报这样的警告信息。2、(网友总结)该函数所在源文件没有被编译为.o二进制文件。解决办法:1、在调用之前先声明这个函数,一般使用extern关键字(该关键字非必需) 声明函数可以不加extern,函数默认extern;声明变量必须要加extern...原创 2018-12-28 14:24:48 · 34851 阅读 · 0 评论 -
C语言函数隐式声明(1)
这段时间,在看中心后台服务软件源码时发现,有很多自定义函数未经声明却能在主程序中被调用,主程序中没有包括上述函数的头文件,我在各个目录中也找不到上述函数的头文件。这就奇怪了,连使用标准库函数printf()都要包括标准输入输出头文件<stdio.h>,何况是自定义函数?这个问题困扰了我很久。前天问中创公司奚钟华,他说:确实没有头文件,他也试过,在原来的目录中编写了一些新的函数,照葫芦画...转载 2018-12-27 19:24:17 · 6718 阅读 · 0 评论 -
多进程引用动态链接库中的全局变量问题
多进程引用动态链接库中的全局变量问题现象描述:前提:存在一个动态库libvlan.so,存在一个应用console。做法:在console中调用libvlan.so中的两个APIs,分别是设置和获取动态库中一个全局变量的值。结果:在console中的操作没有问题,设置和获取都正常;但在动态库中打印该全局变量,其值并没有改变。结论:动态库中的全局变量,在被其他进程使用...原创 2019-05-23 16:37:09 · 6920 阅读 · 0 评论 -
C语言中移位操作
先要了解一下C语言里所有的位运算都是指二进制数的位运算。即使输入的是十进制的数,在内存中也是存储为二进制形式。“<<”用法:格式是:a<<m,a和m必须是整型表达式,要求m>=0。功能:将整型数a按二进制位向左移动m位,高位移出后,低位补0。“>>”用法:格式是:a>>m,a和m必须是整型表达式,要求m>=0。功能...转载 2019-07-25 18:19:06 · 27824 阅读 · 1 评论 -
字节序(byte order)和位序(bit order)
字节序(byte order)和位序(bit order) 在网络编程中经常会提到网络字节序和主机序,也就是说当一个对象由多个字节组成的时候需要注意对象的多个字节在内存中的顺序。 以前我也基本只了解过字节序,但是有一天当我看到ip.h中对IP头部结构体struct iphdr的定义时,我发现其中竟然对一个字节中的8个比特位也区分了大小端,这时我就迷糊了,不是说大小端只有在多个字节之间转载 2018-01-10 20:05:01 · 6871 阅读 · 3 评论 -
C语言之优先级、结合性与自增运算
优先级、结合性这些概念在初学的时候并没有放在心上,今天又碰到这个问题,查了不少资料,再次做个总结。 在标准C语言的文档里,对操作符的结合性并没有做出非常清楚的解释。一个满分的回答是:它是仲裁者,在几个操作符具有相同的优先级时决定先执行哪一个。每个操作符拥有某一级别的优先级,同时也拥有左结合性或右结合性。优先级决定一个不含括号的表达式中操作数之间的“紧密”程度。例如,在表达式a...原创 2016-08-18 21:08:53 · 4375 阅读 · 2 评论 -
C语言中关于位域的介绍
有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。 为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为"位域"或"位段"。所谓"位域"是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域原创 2015-07-28 22:12:22 · 7412 阅读 · 2 评论 -
单片机中C语言指针与变量
指针与变量注:keil中单片机C编程若指针没有指向提前声明的变量,会产生混乱eg:情景一: 情景二:Type *p,*q; Type *p,*q,pp,qq;给指针p赋值; p=&pp;给指针q赋值; q=&qq;p或q的值会出问题 正常,没问题(Type为一结构体)结论:情景二中,是指针使用的规范过程,先分配了变量,然后指针指向变量。情景一中则没有定义变量,直原创 2015-07-30 22:22:39 · 1780 阅读 · 0 评论 -
字节序之大小端模式
全文http://hjctty.blog.51cto.com/1031616/550626 在各种计算机体系结构中,对于字节、字等的存储机制有所不同,因而引发了计算机通信领域中一个很重要的问题,即通信双方交流的信息单元(比特、字节、字、双字等等)应该以什么样的顺序进行传送。如果不达成一致的规则,通信双方将无法进行正确的编/译码从而导致通信失败。目前在各种体系的计算机中通常采用的字节存储机制转载 2016-06-14 15:39:54 · 7802 阅读 · 0 评论 -
C语言中有关外部函数调用的问题
首先指出一点,我们通常所说的编译器并非仅指编译器,确切来说是编译工具链,里面包括了预编译器、编译器、汇编器和连接器。对于外部函数实体(处于调用函数所在源文件之外的其他源文件中的函数),是在链接过程中,才会被寻找和添加进程序,一旦没有找到函数实体,就会报错,无法成功链接。而外部函数的声明(一般声明在头文件中)只是令程序顺利通过编译而已,此时并不需要搜索到外部函数的实体。当然,外部函数实体...原创 2016-06-16 21:44:57 · 21216 阅读 · 0 评论 -
嵌入式软件工程师常见笔试题
> 预处理器(Preprocessor)1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2). 懂得预处理器将为你计算常数表达式的值,因转载 2016-07-06 20:56:21 · 2957 阅读 · 3 评论 -
C语言之可变参数
可变参数总结:可变参数的函数原理其实很简单,是以宏定义来实现的,其实现跟堆栈相关。我们写一个可变函数的C函数时,有利也有弊,所以在不必要的场合,我们无需用到可变参数。如果在C++里,我们应该利用C++的多态性来实现可变参数的功能,尽量避免用C语言的方式来实现。零、C函数调用的栈结构 可变参数函数的实现与函数调用的栈结构密切相关,正常情况下C的函数参数入栈规则为__stdcall,原创 2016-06-23 17:29:21 · 467 阅读 · 0 评论 -
C语言中关于#ifdef _cplusplus extern "C"
面试时被问到过,不甚明了,网上百度一下,整合了两个仁兄的文章,如下。:-) 时常在cpp的代码之中看到这样的代码: #ifdef __cplusplus extern "C" { #endif //一段代码 #ifdef __cplusplus } #endif 这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏原创 2015-06-11 18:21:29 · 1269 阅读 · 0 评论 -
C语言之memcpy函数
昨天自己动手实现memcpy这个函数,用一个例程试了一下,结果正确,满心欢心,可是有些地方想不明白,于是百度了一下,结果自己写的函数简直无法直视。觉得还是写个总结,以示教训。先贴上我自己的函数:char *mymemcpy(char *dest, const char * src, int n){ char *pdest; char *psrc;原创 2016-06-17 13:42:54 · 52594 阅读 · 6 评论 -
C语言中关于字符数组和指针数组
做笔试题目的时候,碰到字符数组初始化的问题,居然一下子懵了。在C语言中存储字符串有两种方法:字符数组和字符串指针这两者的存储位置不同,首先字符数组(局部变量)是保存在栈中的;指针指向字符串时,则包括了两部分,指针本身,存储在栈中(局部指针变量),字符串本身存储在代码段(GCC中是这样)。基于上面一点就会产生很多不同,比如后者存在代码段是肯定不能被修改的,当然也不能作为strcpy等函数原创 2016-10-21 20:04:27 · 1550 阅读 · 0 评论 -
C语言之strcat函数
原本以为很简单的一个例子,结果让我郁闷了一个上午虽然这个知识点也懂,但还是在实践中犯了错,一个上午的时间,多么痛的领悟啊原创 2016-08-23 14:13:01 · 1111 阅读 · 0 评论 -
c语言中结构体指针
1、指向结构体的指针变量:C 语言中->是一个整体,它是用于指向结构体,假设我们在程序中定义了一个结构体,然后声明一个指针变量指向这个结构体,那么我们要用指针取出结构体中的数据,就要用到指向运算符“->”.原创 2015-07-29 21:59:57 · 22367 阅读 · 2 评论