
C/C++基础
文章平均质量分 72
走过_冬天
这个作者很懒,什么都没留下…
展开
-
C++动态链接问题的几种解决方法
"undefined reference to function(xxx)"是一个非常常见问题,每个C++程序员应该都不会感到陌生。与之相伴的通常还有一个“No such file xxx.h”,一般是头文件找不到的问题。这种问题相对简单,因为头文件的查找发生在编译期,如果头文件没找到,当然链接的问题可能还没机会暴露。武林秘籍也分招式和心法,招式更像是““undefined reference to问题汇总”。当遇到类似问题的时候,总是对照汇总中的招式,一个个比对解决。招式和心法都很重要,都能解决问题,但原创 2020-11-21 17:57:42 · 1423 阅读 · 0 评论 -
记录:当指针作为函数参数时要注意的问题
当指针作为函数参数时,最好加上const,防止函数修改指针所指的地址。考虑这样一个函数,分析输出结果:void function(std::shared_ptr<A> ptr){ cout << "ptr_use_count = "<< ptr.use_count() << std::endl; // ptr_use_count = 2 std::cout << "ptr_address = " << ptr.g原创 2020-11-21 10:20:07 · 917 阅读 · 0 评论 -
单继承类的虚函数表
打印虚函数表#include <iostream>#include <stdio.h>using namespace std;class ClassA{public: ClassA(){m_data1 = 1; m_data2 = 2;} int m_data1; int m_data2; void func1(){cout << "ClassA::func1" << endl;} void func2原创 2020-06-07 13:54:53 · 287 阅读 · 0 评论 -
成员函数在内存中的分布
要看成员函数在内存中的分布,那需要先获得成员函数的地址,于是可以用函数指针指向成员函数,再打印地址,先来看下面一段代码:#include <iostream>#include <stdio.h>using namespace std;class ClassA{public: ClassA(){m_data1 = 1; m_data2 = 2;} int m_data1; int m_data2; void func1(){cout &原创 2020-06-07 13:22:25 · 426 阅读 · 0 评论 -
VS2013编程实用小技巧
1. Peek View可以在不新建TAB的情况下快速查看、编辑一个函数的代码。用法:在光标移至某个函数下,按下alt+F12,显示Peek窗口,按F12直接转到定义。 然后在Peek窗口里可以继续按alt+F12。然后按ctrl +’-‘,或者ctrl+’+’就可以前后跳转。按ESC关闭Peek窗体。这下就不需要来回跳转了……(alt+G可以跳转至函数定义的地方,alt+左箭头可以回退)2.原创 2016-10-26 21:58:42 · 3570 阅读 · 0 评论 -
va_start(),va_end(),vsnprintf()函数
va_start()va_end()函数应用: man: #include <stdarg.h> void va_start(va_list ap, last); type va_arg(va_list ap, type); void va_end(va_list ap); void va_copy(va_list dest, va_原创 2016-11-04 13:56:12 · 1910 阅读 · 0 评论 -
main函数中的参数int argc和char* argv[]
int main(int argc, char *argv[], char *envp[]) int argc 用于表示你在命令行下输入命令的时候,一共有多少个参数。 char *argv[] 用于取得你所输入的参数。 char *envp[] 用于取得系统的环境变量,用得比较少。 例如: D:\Progream>test D:\P原创 2016-11-04 10:58:03 · 406 阅读 · 0 评论 -
面试题
将string 转化intint str2int(const char *s) { int sign; int value; if (*s == '+') { ++s; sign = 1; } else if (*s == '-') { ++s; sign = -1;原创 2016-11-04 10:20:54 · 302 阅读 · 0 评论 -
typedef常用方法
typedef是一个一直被忽略的关键字,它的作用就是给已知数据类型命别名,经常看到,但自己的代码中用的很少。今天看《嵌入式操作系统uC/OS-II》的时候看到了一段关于typedef应用总结,讲得很有道理,记录下来。以下内容有参考《嵌入式操作系统uC/OS-II》p43~p451、简化复杂数据类型名称。 typedef的典型应用就可以用一个较为简短的别名去表示一个复杂数据类型。例如简化函数指针类型原创 2016-10-21 22:14:09 · 752 阅读 · 0 评论 -
函数指针
读大学的时候,专业老师故意避开了函数指针这一部分没有讲,说这个太难了,怕很多同学不懂,打消对学习的积极性。当时在学校基本上用不到,也没去管了,所以一直对函数指针敬而远之。后来发现在工作中,回调,函数指针用得特别多,不管有多难,这个必须得弄懂。借用周末的时间再重新学习一遍。以下内容参考了《嵌入式实时操作系统uC/OS-II》p37~p43。函数指针是最重要的C指针之一,它可以指向一个函数。 一个函数原创 2016-10-21 21:13:23 · 326 阅读 · 0 评论 -
V4L2摄像头获取图片
昨天拷了一段以前写的在Windows下运行的摄像头录像代码,发现在Ubuntu14.04下这样写有问题:/****************************//*摄像头录像测试程序 *//****************************/#include <cv.h>#include <iostream>#include <opencv2/highgui/原创 2016-06-13 21:26:47 · 3429 阅读 · 0 评论 -
实用算法
算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。 快速排序使用分治法(Divide and conquer)策略来把一原创 2016-03-04 10:33:56 · 443 阅读 · 0 评论 -
C++中#pragma pack(N)的用法
在32位机器上,下列代码中#pragma pack(2)class A{ int i; union U { char buff[13]; int i; }u; void foo() { } typedef char* (*f)(void*); enum{ red, green, blue } color;}a;siz原创 2016-10-17 17:52:46 · 7337 阅读 · 0 评论 -
Mutex的lock(), tryLock()区别
lock函数和tryLock函数都是用于锁定对象,但他们之间有一定的区别: lock函数是阻塞的,因为它调用WaitForSingleObject函数时传递的第二个参数是INFINITE,表示无限等待下去,所以是阻塞的。 tryLock函数时非阻塞的,调用后立即返回。因为它调用WaitForSingleObject函数时传递的第二个参数是0,表示不等待,立即返回。 调用lock或者tryLoc转载 2016-10-06 11:49:10 · 11884 阅读 · 0 评论 -
fatal error C1047 对象或库文件“....Win32Release xxx.obj”是使用比创建其他对象所用编译器旧的编译器创建的;请重新生成旧的对象和库
https://msdn.microsoft.com/en-us/library/ms173554(v=vs.80).aspxFatal Error C1047Visual Studio 2005 Other Versions Error Message The object or library file ‘file’ was created with an older compiler t原创 2016-11-17 11:03:16 · 1735 阅读 · 0 评论 -
C语言深度解剖读书笔记之——C语言基础测试题
转载http://blog.youkuaiyun.com/feitianxuxue/article/details/7334929前几天天看到这本书,感觉不错,在看之前,先做了后面的习题,结果只得了60多分,一直以为自己的基础还是不错的,做完后对了答案后,感觉自己的自信心一下全没有了,不过遇到问题解决问题,我用了2天时间好好研读了这本书,感觉真不错。虽然感觉都是一些基础的知识,但是我读的还转载 2016-12-15 21:08:14 · 338 阅读 · 0 评论 -
vector erase()的用法
#include <iostream>#include <vector>using namespace std;int main(){ vector<int > vctInt; vector<int>::iterator iter; for (int i = 0; i < 10; i++) { vctInt.push_back(i); }原创 2016-10-31 09:41:12 · 800 阅读 · 0 评论 -
C语言位运算
位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。 C语言提供的位运算符列表: 运算符 含义 描述 & 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0 | 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1 ^原创 2016-12-15 21:52:27 · 575 阅读 · 0 评论 -
红黑树算法的实现与剖析
转载:http://blog.chinaunix.net/uid-26575352-id-3061918.html直接下载:http://www.cs.princeton.edu/~rs/talks/LLRB/RedBlack.pdf一、红黑树的介绍先来看下算法导论对R-B Tree的介绍:红黑树,一种二叉查找树,但在每个结点上增加一个存储位表示结点的颜转载 2016-12-15 20:56:20 · 7350 阅读 · 0 评论 -
C++ const 总结
C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。 一、Const作用 如下表所示:No.作用说明参考代码转载 2016-11-27 13:42:02 · 309 阅读 · 0 评论 -
传值,传指针和传引用区别和联系
C++写了很多年,有一天,写着写着代码。竟然自己发现对传值,传指针,传引用这个每天都在用的传递方式的区别还不是很清楚。以为自己懂了,其实还理解得还不够深入,基础还需要花时间琢磨。今天参考了很多篇博客和书籍做些总结。其实,不用分为三类,只有两类即可。传值和传引用。为什么会出现传地址(即传指针)呢?本质就是大家一致对传值和传地址概念的理解错误导致,也是对指针的概念的理解错误导致。概念指针:指针就是一个变原创 2016-11-27 12:15:28 · 27350 阅读 · 11 评论 -
静态变量的生存周期和作用域
首先要理解生存周期与作用域的区别:生存周期: 变量从定义到销毁的时间范围。存放在全局数据区的变量的生存周期存在于整个程序运行期间,而存放在栈中的数据则随着函数等的作用域结束导致出栈而销毁,除了静态变量之外的局部变量都存放于栈中。作用域: 变量的可见代码域(块作用域,函数作用域,类作用域,程序全局作用域)。static变量是指静态的变量,不管是在全局还是局部声明的static变量都存放于程序的全局变量原创 2016-11-26 21:04:58 · 1670 阅读 · 0 评论 -
对深拷贝与浅拷贝的再次理解
浅拷贝,即在定义一个类A,使用类似A obj; A obj1(obj);或者A obj1 = obj; 时候,由于没有自定义拷贝构造函数,C++编译器自动会产生一个默认的拷贝构造函数。这个默认的拷贝构造函数采用的是“位拷贝”(浅拷贝),而非“值拷贝”(深拷贝)的方式,如果类中含有指针变量,默认的拷贝构造函数必定出错。 用一句简单的话来说就是浅拷贝,只是对指针的拷贝,拷贝后两个指针指向同一个内存空转载 2016-11-26 18:14:04 · 530 阅读 · 0 评论 -
回调函数
因为程序中很少用到函数指针,所以一直对函数指针带有一种陌生感和恐惧感,但作为一名程序员,不能再让这种陌生和恐惧感继续下去了,因此,到处找资料,拜读前辈写的博客,向同事请教,讨论。如果你也像我有同感,就随我一起去揭开回调的神秘面纱。首先解决三个问题: 1、什么是回调? 2、为什么要有回调,回调能解决什么问题? 3、什么时候用回调?1、什么是回调? 回调函数是一个由调用方自己实现,供被调用方使用原创 2016-01-07 16:47:22 · 596 阅读 · 0 评论 -
clock_t用法
clock_t定义#ifndef _CLOCK_T_DEFINEDtypedef long clock_t;#define _CLOCK_T_DEFINED#endifclock_t是一个长整形数。在time.h文件中,还定义了一个常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元,其定义如下:#define CLOCKS_PER_SEC ((clock_t)1000)c原创 2016-01-21 11:17:45 · 48906 阅读 · 0 评论 -
C++中重载、重写(覆盖)和隐藏的区别
如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数有virtual关键字。此时,基类的函数不会被“隐藏”。(在这里,你要理解为覆盖哦^_^) 隐藏”是指派生类的函数屏蔽了与其同名的基类函数,具体规则: 1、如果派生类的函数与基类的函数同名,但是参数不同。此时,若基类无virtual关键字,基类的函数将被隐藏。(注意别与重载混淆,虽然函数名相同参数不同应称之为重载,但这里不能理解为重载原创 2015-10-08 18:33:48 · 17836 阅读 · 9 评论 -
C/C++常用时间函数介绍
声明文章转载自:http://public0821.iteye.com/blog/630168Coordinated Universal Time(UTC):协调世界时,又称为世界标准时间,也就是大家所熟知的格林威治标准时间(Greenwich Mean Time,GMT)。比如,中国内地的时间与UTC的时差为+8,也就是UTC+8。美国是UTC-5。Calendar Time:日历时间,是用“从一转载 2015-08-21 14:23:47 · 713 阅读 · 0 评论 -
官方 NSIS 插件全集简单介绍
来源地址: http://www.cnrui.cn/blog/article.asp?id=52• Math plugin (contain examples) 数学函数插件,NSIS 软件已包含,这个不用说了吧,计算的时候必用。 • System plugin (contain examples) 调用其他动态链接库(*.dll)插件,NSIS 软件已包含,超级好用,把 window转载 2015-08-14 17:03:13 · 1089 阅读 · 0 评论 -
C/C++中extern关键字详解
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是C++的,转载 2015-08-07 14:46:26 · 495 阅读 · 0 评论 -
C语言位运算
说明:本文参考了http://www2.tsu.edu.cn/www/cjc/online/cyuyan/,算是对其的修正,在此将本文列为原创,实有抄袭之嫌疑。甚是惭愧!位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作 运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。 C语言提供的位运算符列转载 2015-05-15 22:04:14 · 533 阅读 · 0 评论 -
error c2129:静态函数已声明但未定义
error c2129:静态函数已声明但未定义 今天在调用setMouseCallback()时遇到一个问题,回调函数mouse_callback()定义的是一个静态函数。后来在*.cpp中实现,在main.cpp中调用报“error c2129:静态函数已声明但未定义”的错误。function.h#ifndef STATIC_TEST#define STATIC_TEST#include <原创 2015-05-15 20:31:13 · 11648 阅读 · 4 评论 -
《C语言深度解剖》:大端与小端
两种存储模式,概念如下 大端模式:字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。 小端模式:字数据的高字节存储在高地址中,而字数据的低字节则存放在低地址中。 还知道有个方法选择系统是哪种存储模式及两个图:int checkSystem(){ union check { int i; char ch; }c; c.原创 2015-05-15 21:35:04 · 579 阅读 · 0 评论 -
卓越的教练是如何训练高手的?
原文地址:卓越的教练是如何训练的?作者:ZLG-周立功 编者按:我们知道,优秀的运动员除了自身的天赋和努力之外,出色的教练必不可少。一个成功的企业除了拥有出类拔萃的员工之外,同样需要一位出色的教练,那就是企业的CEO。由此可见,如果我们要想成为一位优秀的程序员,毫无疑问卓越的教练是致关重要的。无数事实告诉我们,成功者之所以成功,是因为成功地选择导师的缘故。 周立功公司之所以在转载 2015-05-15 21:07:53 · 623 阅读 · 0 评论 -
const修饰指针和引用的用法
原文地址:http://blog.sina.com.cn/s/blog_5f4ca5a10100dpid.html:波托菲诺const修饰指针和引用的用法,对于初学C++的人直是讳莫如深,不知所云. 一旦你了解了其用法,一切便不值一哂了.下面我为读者一一释疑: 大致说来其可分为三种情况: const修饰指针,const修饰引用,const修饰指针的引用.1.const修饰指针cons转载 2015-05-15 21:49:27 · 583 阅读 · 0 评论 -
strcmp函数的源代码分析
strcmp源代码如下:int __cdecl strcmp (const char * src, const char * dst){ int ret = 0 ; while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst) ++src, ++dst;转载 2015-05-15 21:29:15 · 6881 阅读 · 2 评论 -
内存拷贝strcpy(),memcpy(),memmove()比较
转载:http://blog.youkuaiyun.com/feitianxuxue/article/details/7195158 内存重叠:拷贝的目的地址在源地址范围内。所谓内存重叠就是拷贝的目的地址和源地址有重叠。 在函数strcpy和函数memcpy都没有对内存重叠做处理的,使用这两个函数的时候只有程序员自己保证源地址和目标地址不重叠,或者使用memmove函数进行内存拷贝。 memmove函数对转载 2015-05-15 21:16:48 · 912 阅读 · 0 评论 -
C++监听文件夹下的添加、修改、删除文件事件
#include <iostream>#include <windows.h>#include <tchar.h>#include <iomanip>using namespace std;void fileWatcher();int main(){ fileWatcher(); return 0;}void fileWatcher(){ DWORD cbByte原创 2015-09-12 10:47:16 · 9222 阅读 · 12 评论 -
public、protect、private继承方式 C++
public公有继承 protected保护继承 private私有继承我们知道类的private和protected成员,在类外是不可以使用的.只有public成员可以在类外直接使用.公有继承时,基类的private成员派生类也不可用,基类的public和protected成员在派生类中可直接使用.继承过来(变成派生类相应的public和protected成员)只有public成员在派生类外可转载 2015-09-29 09:10:02 · 1168 阅读 · 0 评论 -
函数回调例程
函数回调测试test_callback.h#pragma once#include <iostream>void printWelcome(int len);void printGoodbye(int len);void callback(int times, void(*print)(int));test_callback.cpp#include "test_callback.h"using n原创 2015-09-19 16:38:35 · 453 阅读 · 0 评论 -
C++创建文件夹
#include <iostream>#include <fstream>#include <direct.h>#include <windows.h>using namespace std;int main(){ char path[MAX_PATH] = "E:\\FTP"; FILE *fp = NULL; fp = fopen(path, "r"); if原创 2015-09-19 16:24:01 · 1204 阅读 · 0 评论