C&C++学习笔记
文章平均质量分 70
echo_qiang
路是靠自己走出来的~
展开
-
inline函数问题
<br />inline函数<br />我们看下面的函数,函数体中只有一行语句:<br />double Average(double total, int number){ return total/number; } 定义这么简单的函数有必要吗?实际上,它还是有一些优点的:<br />第一,它使程序更可读;<br />第二,它使这段代码可以重复使用。<br />但是,它也有缺点:当它被频繁地调用的时候,由于调用函数的开销,会对应用程序的性能(时间+空间效率,这儿特指时间)有损失。例如,Average在一原创 2010-09-24 15:17:00 · 735 阅读 · 0 评论 -
结构对齐
有关字节对齐的介绍:什么是对齐,以及为什么要对齐:现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。其他平台可能没有这种情况,但是最常见的是如果不按照适合其平台要求对数据存放进行对齐,会在存取效率上原创 2011-04-09 17:07:00 · 549 阅读 · 0 评论 -
动态分配二维数组
在C语言中动态的一维数组是通过malloc动态分配空间来实现的,动态的二维数组也可以通过malloc动态分配空间来实现。 实际上,C语言中没有二维数组,至少对二维数组没有直接的支持,取而代之的是“数组的数组”,二维数组可以看成是由指向数组的指针构成的数组。对于一个二维数组p[i][j],编译器通过公式*(*(p+i)+j)求出数组元素的值: 1、p+i 计算行指针。 2、*(P+i) 具体的行,是一个指针,指向该行首元素地址。 3、*(P+i)+j 得到具体元素的地址转载 2011-05-27 17:28:00 · 911 阅读 · 0 评论 -
关于函数返回值的几种情况
<br />在一个函数的内部,return的时候返回的都是一个拷贝,不管是变量、对象还是指针都是返回拷贝,但是这个拷贝是浅拷贝。<br /> <br />1. 如果返回一个基本类型的变量,比如:<br />int a;<br />a = 5;<br />return a;<br /> <br />那么就会a的一个拷贝,即5返回,然后a就被销毁了。尽管a被销毁了,但它的副本5还是成功地返回了,所以这样做没有问题。<br /> <br />2. 但是对于非动态分配(new/malloc)得到的指转载 2011-05-18 09:29:00 · 611 阅读 · 0 评论 -
回溯法
<br /><br />回溯法<br /> 回溯法也称为试探法,该方法首先暂时放弃关于问题规模大小的限制,并将问题的候选解按某种顺序逐一枚举和检验。当发现当前候选解不可能是解时,就选择下一个候选解;倘若当前候选解除了还不满足问题规模要求外,满足所有其他要求时,继续扩大当前候选解的规模,并继续试探。如果当前候选解满足包括问题规模在内的所有要求时,该候选解就是问题的一个解。在回溯法中,放弃当前候选解,寻找下一个候选解的过程称为回溯。扩大当前候选解的规模,以继续试探的过程称为向前试探。转载 2011-03-21 22:20:00 · 4878 阅读 · 3 评论 -
C++内存分配秘籍—new,malloc,GlobalAlloc详解
<br /> C++内存分配秘籍—new,malloc,GlobalAlloc详解<br /> _______只为因内存分配而无法入眠的程序员<br />一。关于内存<br /> 1、内存分配方式<br /> 内存分配方式有三种:<br /> (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在<br />。例如全局变量,static变量。<原创 2011-03-17 01:22:00 · 835 阅读 · 0 评论 -
linux 链表实例应用程序
/********************************************************************* * * Filename: pfile.c * Version: 1.0 * Description: Demo for Linux LIST utility * Compilation: gcc –D__KERNEL__ -I/usr/src/linux/include pfile.c转载 2011-03-09 02:07:00 · 2827 阅读 · 0 评论 -
container_of()理解
<br /><br /><br /><br />问题:如何通过结构中的某个变量获取结构本身的指针???<br /><br />关于container_of见kernel.h中:<br />/**<br />* container_of - cast a member of a structure out to the containing structure<br />* @ptr: the pointer to the member.<br />* @type: t原创 2011-03-09 10:20:00 · 506 阅读 · 0 评论 -
linux内核链表
<br />国防科技大学计算机学院<br />2004 年 8 月 本文详细分析了 2.6.x 内核中链表结构的实现,并通过实例对每个链表操作接口进行了详尽的讲解。<br />一、 链表数据结构简介<br />链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问的顺序性和组织链的空间损失。<br /转载 2011-03-09 08:14:00 · 672 阅读 · 0 评论 -
scanf的注意细节
scanf()函数的用法和实践daizh摘要:本文阐述了基于ANSI,Win 95,Win NT上的 C/C++语言中scanf()函数的用法,以及在实际使用中常见错误及对策。关键词:scanf()一、 序言在CSDN论坛的C/C++版块,我时常见到“对于scanf()函数的用法、及出现的各种错误而迷惑”的帖子,萌发了我写这篇文章的念头。文中结合自身在学习和编程中对它的认识和体会,以具体示例阐述问题,目的在于使得初学者能够正确使用scanf()函数,少走不必要的弯路。二、转载 2011-03-01 11:18:00 · 905 阅读 · 0 评论 -
Printf()函数简单实现
/************************************************************************/<br />/* coder:huifeng00 <br />/* 时间:2010-5-23<br />/* 功能:简单实现自己的printf()函数,识别%d,%s,%c<br />/*********************************原创 2010-11-25 15:13:00 · 768 阅读 · 0 评论 -
C语言注释风格
<br />C语言编程规范-注释<br /><br /> 规则:<br />1:一般情况下,源程序有效注释量必须在20%以上。<br />说明:注释的原则是有助于对程序的阅读理解,在该加的地方都加了,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。<br />2:说明性文件(如头文件.h文件、.inc文件、.def文件、编译说明文件.cfg等)头部应进行注释,注释必须列出:版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等,头文件的注释中还应有函数原创 2010-11-04 09:52:00 · 18657 阅读 · 0 评论 -
二位指针和二位数组理解
<br />下面三种定义形式怎么理解?怎么动态分配空间? <br />(1)、int **Ptr; <br />(2)、int *Ptr[ 5 ]; 我更喜欢写成 int* Prt[5]; <br />(3)、int ( *Ptr )[ 5 ];<br />此文引自网上,出处不详,但是觉得非常好。略改了一点。<br />多维数组一向很难,一般都采用一维数组,但是一旦要用到还真是头疼。 <br />闲话少说,这里我就以三个二维数组的比较来展开讨论: <br /> (1)、int转载 2010-11-03 20:21:00 · 2207 阅读 · 0 评论 -
对sizeof()的深入理解
sizeof,一个其貌不扬的家伙,引无数菜鸟竟折腰,小虾我当初也没少犯迷糊,秉着“<br />辛苦我一个,幸福千万人”的伟大思想,我决定将其尽可能详细的总结一下。<br />但当我总结的时候才发现,这个问题既可以简单,又可以复杂,所以本文有的地方并不<br />适合初学者,甚至都没有必要大作文章。但如果你想“知其然,更知其所以然”的话,<br />那么这篇文章对你或许有所帮助。<br />菜鸟我对C++的掌握尚未深入,其中不乏错误,欢迎各位指正啊<br /><br />1. 定义:<转载 2010-11-02 15:35:00 · 554 阅读 · 0 评论 -
什么是二进制文件
<br />二进制文件<br />英文:Binary files - 包含在 ASCII 及扩展 ASCII 字符中编写的数据或程序指令的文件。计算机文件基本上分为二种:二进制文件和 ASCII(也称纯文本)文件,图形文件及文字处理程序等计算机程序都属于二进制文件。这些文件含有特殊的格式及计算机代码。ASCII 则是可以用任何文字处理程序阅读的简单文本文件。<br />从本质上来说他们之间没有什么区别,因为他们在硬盘上都有一种的存放方式--二进制,但是如果要对他们有些区分的话,那可以这样理解。我们现在的每个原创 2010-09-24 15:10:00 · 1081 阅读 · 0 评论 -
细小语法(我容易忘记的)
<br /><br />Memset函数用法(C语言)<br />原型是extern void *memset(void *buffer, int c, int count) <br />buffer为指针或是数组,c是赋给buffer的值,count是buffer的长度. <br />这个函数在socket中多用于清空数组. <br />如:原型是memset(buffer, 0, sizeof(buffer)) <br /> <br /> <br />ungetc是将读出的数据再次放回到缓冲区去,下原创 2010-09-24 15:06:00 · 429 阅读 · 0 评论 -
序列化实例
<br />#include <stdlib.h><br />#include<stdlib.h><br />#include<time.h><br /><br />#define random(x) (rand()%x)<br /><br />#define OUT<br />#define IN<br /><br />typedef struct _XY<br />{<br /> int nX;<br /> struct _XY* pNext;<br />}XY,* PXY;<br />type转载 2011-04-13 02:17:00 · 726 阅读 · 0 评论