随笔分类 -  C/C++基础

学习C语言的同时,增加用C来描述算法的能力。C语言尽量在Linux上写。
摘要:成员函数后面加const,表示在该函数中不能对类的数据成员进行改变,比如下面的代码: 1 #include 2 3 class A 4 { 5 private: 6 mutable int aa; 7 public: 8 A(){} 9 int x()10 {11 printf("no const\n");12 return aa++;13 }14 int x() const15 {16 printf("const\n");17 return aa++;18 }1... 阅读全文
posted @ 2013-10-29 23:41 stemon 阅读(4430) 评论(1) 推荐(1)
摘要:这几天在看王艳平的《windows 程序设计》,第5章讲解了MFC框架是怎么管理窗口句柄到窗口实例之间的映射,用到了两个类CPlex和CMapPtrToPtr,用于管理内存分配的类(避免因为大量地、频繁地创建窗口对象导致内存碎片的产生)。CMapPtrToPtr类用到了关联结构体CAssoc,其中有好多对指针类型的转换,感觉对结构体了解不够。特别是成员的对齐方式,跟我猜测的完全不同,花了点时间搞清楚了。在跟朋友一起吃饭还有时间,就顺手写下来,供大家参考:首先明白几个概念:1、结构体成员的对齐字节数:可以是n=(1,2,4,8,16);VC编译器默认是8,可以打开工程设置->C/C++-& 阅读全文
posted @ 2013-10-29 09:45 stemon 阅读(737) 评论(0) 推荐(0)
摘要:今天在网上看到了一篇写得非常好的文章,是有关c++类继承内存布局的。看了之后获益良多,现在转在我自己的博客里面,作为以后复习之用。——谈VC++对象模型(美)简.格雷程化 译译者前言一个C++程序员,想要进一步提升技术水平的话,应该多了解一些语言的语意细节。对于使用VC++的程序员来说,还应该了解一些VC++对于C++的诠释。 Inside the C++ Object Model虽然是一本好书,然而,书的篇幅多一些,又和具体的VC++关系小一些。因此,从篇幅和内容来看,译者认为本文是深入理解C++对象模型比较好的一个出发点。这篇文章以前看到时就觉得很好,旧文重读,感觉理解得更多一些了,于是产 阅读全文
posted @ 2013-10-29 00:12 stemon 阅读(733) 评论(0) 推荐(0)
摘要:clock()是C/C++中的计时函数,而与其相关的数据类型是clock_t。在MSDN中,查得对clock函数定义如下:clock_t clock(void) ;简单而言,就是该程序从启动到函数调用占用CPU的时间。这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU... 阅读全文
posted @ 2013-10-23 18:13 stemon 阅读(4330) 评论(0) 推荐(0)
摘要:文章转载地址:http://blog.csdn.net/yming0221/article/details/6249151void的含义void即“无类型”,void *则为“无类型指针”,可以指向任何数据类型。void指针使用规范①void指针可以指向任意类型的数据,亦即可用任意数据类型的指针对v... 阅读全文
posted @ 2013-10-08 01:37 stemon 阅读(416) 评论(0) 推荐(0)
摘要:转载自51CTO.com http://developer.51cto.com/art/201107/276154.htm我们都知道,内存基本上分为静态存储区、堆区和栈区三大部分。本文介绍的是C++中的内存分配的问题,希望对你有帮助,一起来看。程序运行时,特别要注意的是内存的分配。下面介绍C++程序设计中的内存分配。一、内存基本构成可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。栈区:在执行函数时,函数内局部变量的存... 阅读全文
posted @ 2013-10-07 13:14 stemon 阅读(913) 评论(0) 推荐(0)
摘要:基础知识:栈是一种简单的数据结构,是一种只允许在其一端进行插入或删除的线性表。允许插入或删除操作的一端称为栈顶,另一端称为栈底,对栈的插入和删除操作被称为入栈和出栈。有一组CPU指令可以实现对进程的内存实现栈访问。其中,POP指令实现出栈操作,PUSH指令实现入栈操作。CPU的ESP寄存器存放当前线程的栈顶指针,EBP寄存器中保存当前线程的栈底指针。CPU的EIP寄存器存放下一个CPU指令的内存地址,当CPU执行完当前的指令后,从EIP寄存器中读取下一条指令的内存地址,然后继续执行。 接触过编程的人都知道,高级语言都能通过变量名来访问内存中的数据。那么这些变量在内存中是如何存放的呢?程序又是. 阅读全文
posted @ 2013-10-04 22:07 stemon 阅读(641) 评论(0) 推荐(0)
摘要:一:引言缓冲区溢出漏洞之所以这么多,是在于它的产生是如此的简单。只要C/C++程序员稍微放松警惕,他的代码里面可能就出现了一个缓冲区溢出漏洞,甚至即使经过仔细检查的代码,也会存在缓冲区溢出漏洞。二:溢出尽管缓冲区溢出也会发生在非C/C++语言上,但考虑到各种语言的运用程度,我们可以在某种程度上说,缓冲区溢出是C/C++的专利。相信我,如果你在一个用VB写的程序里面找溢出漏洞,你将会很出名。回到说C/C++,在这两种使用非常广泛的语言里面,并没有边界来检查数组和指针的引用,这样做的目的是为了提高效率,而不幸的是,这也留下了严重的安全问题。先看下面一段简单的代码:#includevoid main 阅读全文
posted @ 2013-10-04 19:21 stemon 阅读(558) 评论(0) 推荐(0)
摘要:Linux的第一课就是学习它用到的编译器GCC。推荐的书籍:《An introduction of GCC》和《expert C programming》History:在自由软件教主Richard Stallman的时代,基本上所有的软件都是收费的,不开源的,例如当时的Windows和Unix。于是教主就发起了一个GNU的活动(GNU的定义就是GUN is Not Unix)。这个活动的目标就是发展一个Unix-like的操作系统,但是当时这个活动面临着一个重大的问题就是没有一个开源的C语言的编译器,于是GCC(GCC是用C语言写的,GNU C Compiler)就应运而生,这就为Linux 阅读全文
posted @ 2013-09-13 12:12 stemon 阅读(356) 评论(0) 推荐(0)
摘要:推荐前言:原文出处:http://book.douban.com/doulist/338101/和其他语言相比(例如C++),C语言是一门比较“小”的语言,可以在较短的时间内入门。但是由于C的很强的表达能力和太多的细枝末节,要想精通比较困难。要做到精通有3种途径:1)阅读经典书籍,只读经典。2)多看优良的源代码。3)学习软件设计,并应用于日常编程。C语言比较经典的书也就那么几本,全部看下来也花不了很多时间。各种语言的优劣问题更像是一个信仰的问题,没有太多讨论的必要,而且大多编程原则适用于任何语言。在这里只讨论我视野所及的C语言书籍:1. C语言程序设计 作者 : 谭浩强 出版社 : 清华大学出 阅读全文
posted @ 2013-09-13 01:45 stemon 阅读(510) 评论(0) 推荐(1)