C
文章平均质量分 78
Gordennizaicunzai
这个作者很懒,什么都没留下…
展开
-
C语言结构体位域详解
一、C语言位域是什么?有时候,信息存储的时候,并不需要一个完整的字节,而只需占几个或一个二进制位就能满足需求。例如存放一个bool类型的变量,只需要true或者false即可,这种情况下,只需要0或者1一位二进制位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位域来表示。二、位域详解转载 2022-05-06 22:20:25 · 3352 阅读 · 1 评论 -
有符号数和无符号数详解(2)补码详解
补码是先求原码的反码,然后在反码的末尾位加1后得到结果,即补码是反码+1。补码的优点它的便利体现在,所有的加法运算可以使用同一种电路完成。转载 2022-05-01 21:19:23 · 1099 阅读 · 0 评论 -
有符号数和无符号数详解
原码:就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。反码:正数的反码是其本身,负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。补码:正数的补码就是其本身,负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1。转载 2022-05-01 21:11:15 · 2996 阅读 · 0 评论 -
详解大端模式和小端模式
一、大端模式和小端模式的起源 关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,命令所有的子民吃鸡蛋的时候,必须先打破鸡蛋较小的一端,违令者重罚。然后老百姓对此法令极为反感,期间发生了多次叛乱,其中一个皇帝因此送命,另一个...转载 2022-01-24 23:39:10 · 10456 阅读 · 0 评论 -
大端、小端与网络字节序
大端(Big-Endian),小端(Little-Endian)以及网络字节序的概念在编程中经常会遇到,网络字节序(Network Byte Order)一般是指大端(Big-Endian,对大部分网络传输协议而言)传输,大端小端的概念是面向多字节数据类型的存储方式定义的,小端就是低位在前(低位字节存在内存低地址,字节高低顺序和内存高低地址顺序相同),大端就是高位在前,(其中“前”是指靠近内存低地址,存储在硬盘上就是先写那个字节)。概念上字节序也叫主机序。一、大小端概念1、首先大小端是面向多字节类型转载 2022-01-24 23:35:57 · 863 阅读 · 0 评论 -
C/C++宏定义连接符“\”
在C/C++宏定义中规定,宏定义只允许写在同一行,下一行就不属于这个宏定义了,而实际定义宏过程中,经常会出现较复杂的宏定义,较长,写在一行不易于读懂,需按逻辑关系断行编写,此时需要在行的末尾用连接符“\”进行连接,表示上下行属于同一行,即同属于这个宏定义。// Connector.cpp : Defines the entry point for the console appli...原创 2018-05-27 21:51:54 · 2276 阅读 · 0 评论 -
C/C++ offsetof
offsetofRetrieves the offset of a member from the beginning of its parent structure.返回结构成员相对于结构开头的字节偏移量。size_t offsetof( structName, memberName );RoutineRequired HeaderCompatibilityoffsetof<stddef....原创 2018-07-08 16:25:31 · 687 阅读 · 0 评论 -
C/C++结构体的正确打开方式
简单的C/C++结构体,一般就定义数据成员,而已,如:struct S_Book{ CString csName; CString csAuthor; float fPrice; short int nVersion;}; 这熟悉的代码在很多程序里面都能看到,因为很多程序员都是这样写的。那么,有问题吗?一般场景没有问题,然而对应稍微复杂些...原创 2018-08-02 00:40:48 · 413 阅读 · 0 评论 -
strtol()详解
今天,在review 一些代码的时候,看到了strtol()这个函数,由于以前使用它的时候,还没有深刻的了解,这次,我决定探个究竟。网上关于这个函数的资料大都来源于同份资料,linux库函数,讲的不够细致。于是,我花了几个小时,认真地尝试其功能,并整理了这篇文章,希望能对C语言的爱好者一些帮助。+----------------+| strtol |+...转载 2018-09-16 13:38:36 · 271 阅读 · 0 评论 -
atoi、stoi、strtoi区别
首先atoi和strtol都是c里面的函数,他们都可以将字符串转为int,它们的参数都是const char*,因此在用string时,必须调c_str()方法将其转为char*的字符串。或者atof,strtod将字符串转为double,它们都从字符串开始寻找数字或者正负号或者小数点,然后遇到非法字符终止,不会报异常:int main() { using namespace std...转载 2018-09-16 13:42:53 · 1687 阅读 · 0 评论 -
C/C++ assert()函数用法总结
1. 简介assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行。原型定义:#include <assert.h>void assert( int expression );assert的作用是先计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abo...转载 2018-11-21 22:29:50 · 288 阅读 · 0 评论 -
解决VS(Visual Studio)2017安全函数问题(C语言安全函数)
在 VS(Visual Studio)2017下编译C语言程序,如果使用了 scanf()、gets()、strcpy()、strcat() 等与字符串读取或操作有关的函数,有时候VS会报错,提示该函数可能不安全,并且建议替换为带有_s后缀的安全函数,如下图所示: 什么是安全函数(safe function)scanf()、gets()、fgets()、strcpy()、strcat()...转载 2018-12-09 23:14:27 · 965 阅读 · 0 评论 -
【c++】i++和++i 详解
【c++】i++和++i 详解 参考:前++(--)和后++(--)的区别 https://blog.csdn.net/u011321104/article/details/9280879《c++ Primer中文版》Stanley B Lippman 等著 1.小引 递增 ++ 和递减-- 操作符为对象加 1或减 1 操作提供了方便简短的表示它们最一般的用法是对...转载 2018-12-22 20:56:20 · 450 阅读 · 0 评论 -
C/C++ typedef用法详解(真的很详细)
第一、四个用途用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量;以下则可行:typedef char* PCHAR; // 一般用大写PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针虽然:char *pa, *pb;也可...转载 2018-05-20 20:39:30 · 549 阅读 · 0 评论 -
C语言fgets函数按行读取文件
fgets, fgetwsGet a string from a stream.C语言没有像C++、Python语言的getline()函数,无法读取文件的某一行。然而,C语言有fgets()函数,该函数返回string类型,关键是该函数遇到换行符或EOF,则读取结束。利用这一特点,我们可以设置n为适当的缓冲区大小,即可以实现按行读取。char *fgets( char *string原创 2018-05-06 23:12:45 · 11255 阅读 · 0 评论 -
C语言结构体的定义和使用
在实际问题中,一组数据往往具有不同的数据类型;例如在学生信息登记表中,姓名为字符型,学号为整型或字符型,年龄为整型,性别为字符型,成绩为整型或实型。因为数据类型不同,显然不能用一个数组来存放。在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。定义结构体的一般形式为:struct 结构体名{ 成员列表};每个成员都是结构体的组成部分,有名字,也有数转载 2015-12-08 23:55:06 · 727 阅读 · 0 评论 -
StrComp
StrComp 为字符串比较的函数,不是标准数据类型的比较函数,==是标准数据类型的比较符,如果用==来比较字符串,相当于比较2字符串(数组)的首地址。compare参数为0或者省略时按二进制按顺序从第一个字符开始作比较字符串的ASCII值的大小,compare参数为1时按文本比较字符串大小且此时不区分大小写。StrComp FunctionRequirements原创 2016-04-25 21:44:33 · 1670 阅读 · 0 评论 -
C语言位运算符:与、或、异或、取反、左移和右移
位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。C语言提供的位运算符列表:运算符 含义 描述& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1转载 2016-09-16 20:01:12 · 25665 阅读 · 1 评论 -
二维数组
一维数组只有一个下标,称为一维数组,其数组元素也称为单下标变量。在实际问题中有很多量是二维的或多维的,因此C语言允许构造多维数组。多维数组元素有多个下标,以标识它在数组中的位置,所以也称为多下标变量。本节只介绍二维数组,多维数组可由二维数组类推而得到。二维数组的定义二维数组定义的一般形式是: 类型说明符 数组名[常量表达式1][常量表达式2]其中常量表达式1表示第一维下标转载 2016-08-13 17:06:28 · 903 阅读 · 0 评论 -
C语言常用转义符和ASCII码表
转义字符含义ASCII码(16/10进制)\o空字符(NULL)00H/0\n换行符(LF)0AH/10\r回车符(CR)0DH/13\t水平制表符(HT)09H/9\v原创 2016-09-16 19:03:35 · 9724 阅读 · 0 评论 -
C文件操作
fseekMoves the file pointer to a specified location.FunctionRequired Headerfseekint fseek( FILE *stream, long offset, int origin );Parametersstream Pointer to F原创 2016-11-20 01:16:14 · 1260 阅读 · 0 评论 -
__stdcall,_stdcall,__cdecl,_cdecl,__fastcall,_fastcall区别简介
1. 今天写线程函数时,发现msdn中对ThreadProc的定义有要求:DWORD WINAPI ThreadProc(LPVOID lpParameter); 不解为什么要用WINAPI宏定义,查了后发现下面的定义。于是乎需要区别__stdcall和__cdecl两者的区别; #define CALLBACK __stdcall #define WINAPI __stdca转载 2017-09-17 20:56:36 · 491 阅读 · 0 评论 -
C语言sizeof详解
1. 定义:sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。MSDN上的解释为:The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregat转载 2017-09-10 17:36:59 · 871 阅读 · 0 评论 -
面试题——C/C++经典问题,及面试笔试题
c语言中指针变量可以相加吗?其含义是什么?指针变量是有加减运算的,但是要注意以下几点:1.指针变量中存放的是地址值,也就是一个数字地址,例如某指针变量中的值是0x20000000,表示表示此指针变量存放的是内存中位于0x20000000地方的内存地址。指针变量可以加减,但是只能与整型数据加减,此时加减的含义并不是其地址值进行了加减,也就是说如果指针变量p的值是0x20000000,那么p=p+转载 2017-09-10 17:28:00 · 807 阅读 · 0 评论 -
C/C++字节对齐
一、字节对其概念: 如果一个变量的内存地址正好位于它长度的整数倍,它就被称做自然对齐。计算机中内存空间字节(byte)划分,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序地一个接一个地排放,这就是对齐。比如在32位cpu下,假设一个整型变量的地址为0x000原创 2016-11-05 23:39:24 · 802 阅读 · 0 评论 -
C语言库函数strtok
strtok函数是用来分解字符串的,其定义为:#include char * strtok(char *s, const char *delim);函数说明:参数s指向需要分割的字符串,参数delim则为用于分割字符串集,是的,是字符串集,当strtok()在参数s的字符串中发现到参数delim的分割字符串集时中任意一个字符串时,则会将该字符串替换成为\0字符。在第一次调用时,strto原创 2018-01-28 20:35:57 · 420 阅读 · 0 评论 -
C语言strstr
char *strstr( const char *string, const char *strCharSet);LibrariesLIBC.LIBSingle thread static library, retail version Return ValueEach of these functions retur原创 2018-02-04 17:27:33 · 560 阅读 · 0 评论 -
C/C++宏定义中#和##的使用方法
单井号(#)在宏定义中,不展开参数,直接替换,作用是把传递过来的参数当成字符串进行替换。双井号(##)又称连接符,它的作用是将参数和前面或后面的子串连接起来,成为一个新的子串。/////////////////////////////////////////////////////////////////////////////// The one and only applicatio原创 2018-04-07 20:59:55 · 487 阅读 · 0 评论 -
strcpy函数
strcpy函数原型1char * strcpy(char *a,char *b){ while((*(a++)=*(b++))!=0);return a;}strcpy函数原型2char *strcpy(char *strDest, const char *strSrc);//strDest为目标,strSrc为源{ assert((strDest!=NULL)原创 2015-10-27 22:57:49 · 612 阅读 · 0 评论