C语言基础
文章平均质量分 58
C语言基础
lanzhihui_
!
展开
-
【知识整理】makefile gtest gcov(lcov)
1.基础安装(安装网上有很多教程,根据机器自行安装即可)1)安装gtest工具2)安装lcov工具2.使用示例1)目录结构main:程序入口ut_test:对branches,calc,function文件夹中的代码行进行单元测试(ut),测试框架为gtest2)示例代码(源代码和编译执行过程都在github上)https://github.com/zhlan/...原创 2019-01-12 22:58:37 · 3236 阅读 · 0 评论 -
关于函数返回引用的分析?
一、函数返回值和返回引用是不同的函数返回值时会产生一个临时变量作为函数返回值的副本,而返回引用时不会产生值的副本。1.普通函数返回值C++ primer中这样写:函数的返回值用于初始化在调用函数处创建的临时对象。在求解表达式时,如果需要一个地方储存其运算结果,编译器会创建一个没有命名的对象,这就是临时对象。例如:#includeusing namespace std;i原创 2015-04-30 14:23:16 · 1574 阅读 · 2 评论 -
函数指针的几种用法
转自:函数指针什么是函数指针?函数指针指向的是特殊的数据类型,函数的类型是由其返回的数据类型和其参数列表共同决定的,而函数的名称则不是其类型的一部分。一个具体函数的名字,如果后面不跟调用符号(即括号),则该名字就是该函数的指针(注意:大部分情况下,可以这么认为,但这种说法并不很严格)。函数指针的声明方法// 定义函数指针pfint (*pf)(constint&转载 2015-05-02 21:28:23 · 4719 阅读 · 0 评论 -
C++中new、delete 与new[]、delete[]
在C++中,申请堆内存,使用new或者new[],在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。关于 new[] 和 delete[],其中又分为两种情况:(1) 为基本数据类型分配和回收空间;(2) 为自定义类型分配和回收空间。先看以下例子:#include#includeusing原创 2015-04-27 20:48:50 · 660 阅读 · 0 评论 -
_BLOCK_TYPE_IS_VALID(pHead->nBlockUse问题解析
在用vs写程序,遇到了一些问题,_BLOCK_TYPE_IS_VALID(pHead->nBlockUse是其中的一个,后来在网上查了一下,得到相关信息,特记录一下,以备查看。问题产生原因:1.内存泄漏;所以当程序退出时,系统会收回分配的内存,于是调析构函数,由于内存已被错误地释放,于是就会出现“Debug Assertion Failed”的错误。2.这个assert说明什么问题呢?原创 2015-04-27 19:38:01 · 19800 阅读 · 5 评论 -
何时需要强制类型转换?
可能运行程序时,大家或多或少出现过编译器报这样的警告:#includeusing namespace std;int main(){ int i=3; double j=3.99; i*=j; cout<<i<<endl;//11 system("pause"); return 0;}warning C4244: “*=”: 从“double”转换到“int原创 2015-04-29 15:07:12 · 2884 阅读 · 0 评论 -
C语言---指针与引用的区别
指针与引用的区别 虽然使用引用 (reference)和指针都可间接访问另一个值,但它们之间有两个重要区别。第一个区别在于引用总是指向某个对象:定义引用时没有初始化是错误的。第二个重要区别则是赋值行为的差异:给引用赋值修改的是该引用所关联的对象的值,而并不是使引用与另一个对象关联。引用一经初始化,就始终指向同一个特定对象(这就是为什么引用必须在定义时初始化的原因)。#in原创 2015-04-26 21:33:49 · 1924 阅读 · 0 评论 -
extern "C"
一、简介extern C extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般只包括函数名。原创 2015-04-20 23:47:37 · 589 阅读 · 0 评论 -
C语言链表基础
实现一个简单的链表#include#include#includeusing namespace std;typedef struct jiaowu{ long num; //学号 float score; //成绩 struct jiaowu *next;}Node;//创建头结点,赋初值为0Node* CreateInfoNode(){ Node原创 2015-04-02 10:59:48 · 848 阅读 · 0 评论 -
C语言字节对齐、结构体对齐最详细的解释
文章最后本人做了一幅图,一看就明白了,这个问题网上讲的不少,但是都没有把问题说透。 一、概念 对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的。 二、为什么要字节对齐 需要字节对齐的根本原因在于CPU访问数转载 2015-03-17 21:57:58 · 62144 阅读 · 7 评论 -
栈区和堆区内存分配区别
一直以来总是对这个问题的认识比较朦胧,我相信很多朋友也是这样的,总是听到内存一会在栈上分配,一会又在堆上分配,那么它们之间到底是怎么的区别呢?为了说明这个问题,我们先来看一下内存内部的组织情况.从上图可知,程序占用的内存被分了以下几部分.1、栈区(stack)由编译器自动分配释放 ,存放函数的参数值,局部变量的值等,内存的分配是连续的,类似于平时我们所说的栈,如果还不清楚,转载 2015-03-17 22:20:09 · 1048 阅读 · 0 评论 -
sscnaf()&sscanf_s()在ip地址识别与判断上的应用
sscanf_s与sscanf函数在对字符串控制写入方面比较灵活,特别是对ip地址的处理,有效性判断等问题,都能很有效的解决。//sscanf sscanf_s#include#includeusing namespace std;int main(){ char buf[256]={0}; char bufs[256]={0}; sscanf("12345678原创 2015-03-28 17:11:38 · 3490 阅读 · 0 评论