c/c++
wyywatdl
这个作者很懒,什么都没留下…
展开
-
static用法小结
还是笔试遇到的,发现今天不停地掉进人家设的陷阱……继续学习 static关键字是C, C++中都存在的关键字, 它主要有三种使用方式, 其中前两种只指在C语言中使用, 第三种在C++中使用(C,C++中具体细微操作不尽相同, 本文以C++为准). (1)局部静态变量 (2)外部静态变量/函数 (3)静态数据成员/成员函数转载 2009-09-11 19:41:00 · 404 阅读 · 0 评论 -
sizeof(string)在编译器下的多面性
看下面程序就知道分晓: #include#includeusing namespace std;int main(){ string a1[]={"micro","soft"}; string * a2=new string[2]; a2[0]="un"; a2[1]="uk"; cout cout cout system("pause"); return 0;}原创 2009-11-04 18:31:00 · 543 阅读 · 0 评论 -
inline与宏的区别
自己总结一下,虽然会不太全面, inline:编译时不生成独立的代码,而是嵌入到函数调用处,有安全类型检查,可以进行调试。和一般函数相比,无返回值,而且函数体不能有循环、switch语句,但是比一般函数调用省去了部分资源 宏:简单地进行代码替换,没有类型检查,不够安全(容易产生边际效应,如果不对参数加括号的话)原创 2009-11-04 19:15:00 · 698 阅读 · 0 评论 -
数据对齐
出现结构体的时候,会存在明显的数据对齐问题 数据对齐的原则:如果结构体的成员中占内存最大的成员类型没有超过处理器的位数,则按照此成员对齐;若超过了,则按照处理器的位数对齐。 举例说明:struct A{ short a; short b; short c;}; 则sizeof(A)为6; struct B{ float原创 2009-11-04 19:41:00 · 480 阅读 · 0 评论 -
声明const和引用时注意都要初始化
声明const和引用时注意都要初始化原创 2009-11-04 20:41:00 · 812 阅读 · 0 评论 -
虚函数&虚继承存在对类的大小的影响
//在书上看到的一段程序,发现,如果类没有虚函数,sizeof只有1字节,若有虚函数,就变成4个字节,如果是虚继承,同样是4个字节,而多继承和单继承都只是1个字节 #include#includeusing namespace std;class A{public: A(){cout ~A(){cout virtual void f(int){}; virtual void f(doubl原创 2009-11-04 18:55:00 · 733 阅读 · 0 评论 -
形参中的数组传递的是数组的首地址
形参中的数组传递的是数组的首地址,如果函数体要使用数组的长度,需要用另一个形参传递,当要用到传递的数组的元素时,要重新建一个数组,并将原数组的值拷贝过去,如下:void fun(int a[] ,int len){ int * b=(int *)malloc(sizeof(int)*len); memcpy(b,a,len);} 或void fun(u原创 2009-11-04 19:28:00 · 2028 阅读 · 0 评论 -
strlen和sizeof的区别
自己总结的才不容易忘记。 其实发现对于很多情况,根本就不能将它们摆在一起比较 strlen:是函数,只用于计算字符串(char *,要求字符串是以"/0"结尾)的长度,函数实现的实质是循环计数,直到遇到"/0",故strlen不会计 算字符串隐含的"/0" sizeof:是算符,对类型或函数(如cout ="0123456789",sizeof(a)的结果原创 2009-11-04 19:58:00 · 530 阅读 · 0 评论 -
利用联合体判断cpu的存储模式
#includeusing namespace std;/*写一个函数判断系统是大端还是小端。若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1.大端格式:在这种格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中小端格式:与大端存储格式相反,在小端存储格式中,低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节联合体union的存放原创 2009-11-06 09:03:00 · 1061 阅读 · 1 评论 -
Main函数参数argc,argv说明
C/C++语言中的main函数,经常带有参数argc,argv,如下:int main(int argc, char** argv) 或 int main(int argc, char* argv[]) 这两个参数的作用是什么呢?argc 是指命令行输入参数的个数,argv存储了所有的命令行参数。假如你的程序是hello.exe,如果在命令行运行该程序,(首先应该在命令行下用 c转载 2009-10-17 13:28:00 · 542 阅读 · 0 评论 -
二叉树的操作(含求二叉树高度)
#include #include #define MAX 10001// 树节点typedef struct node{ char k; struct node *lchild; struct node *rchild;} Node;int max(int m, int n){ if (m > n) return m; else retu转载 2009-10-16 23:46:00 · 965 阅读 · 2 评论 -
拷贝构造函数和赋值操作符的区别
重点:包含动态分配成员的类 应提供拷贝构造函数,并重载"="赋值操作符。 以下讨论中将用到的例子:class CExample{public: CExample(){pBuffer=NULL; nSize=0;} ~CExample(){delete pBuffer;} void Init(int n){ pBuffer=new char[n]; nSize=n;}转载 2009-10-16 11:28:00 · 3137 阅读 · 3 评论 -
sizeof用法
今天参加了一场笔试,发现c语言基础太不牢固了,风一刮就倒,趁早修修补补吧。下面是sizeof操作符(不是函数?)的用法,今天大受打击之处……<a id="newUserTipShadow" style="z-index: 30001; position: absolute; width: 55px; display: block; background: none transparent转载 2009-09-11 18:50:00 · 424 阅读 · 0 评论 -
算法编程
排序算法:已知数组求含最大元素个数的等差数列字符串操作:写函数原型原创 2009-09-23 22:30:00 · 435 阅读 · 0 评论 -
做算法编程题的一般步骤
1.一般题目会提供一个例子有助于理解,对例子进行分析,找到一般的公式,大致确定算法 2.根据对例子的分析,确定流程图,并定义变量(越详细越好,此步有助于准确编程) 3.编程,并保证无语法错误 4.调试,分析逻辑错误原创 2009-09-24 13:35:00 · 2059 阅读 · 0 评论 -
const与#define相比,优点?
首先是#define的优点: 宏不仅可以用来代替常数值,还可以用来代替表达式,甚至是代码段。用宏来代表常数,好处是:)1. 让代码更简洁明了)2. 方便代码的维护 对宏的处理,在编译过程中称为“预处理”。也就是说在正式编译前,编译器必须先将代码出现的宏,用其相应的宏值替换。 看了好多网上的资料,发现说法相当多,以下罗列一些:1.define由预处理程序处原创 2009-10-14 13:40:00 · 7999 阅读 · 2 评论 -
fseek和ftell
fseek函数是 用来设定文件的当前读写位置.函数原型: int fseek(FILE *fp,long offset,int origin);函数功能:把fp的文件读写位置指针移到指定的位置.fseek(fp,20,SEEK_SET); 意思是把fp文件读写位置指针从文件开始后移20个字节.ftell函数是用来获取文件的当前读写位置;函数原型: long ftell(FI原创 2009-10-16 10:13:00 · 9987 阅读 · 0 评论 -
const char* p , char const* p 以及 char * const p的区别?
const char* p , char const* p 以及 char * const p的区别?const在谁后面,谁就不可修改第一个:const 修饰指针指向的变量,此时,变量的值不可改变第二个:与第一个等效第三个:const修饰指针本身,指针不能重新指向别的变量 int const * a const; 意味着a是一个指向常整型数的常指针。也就是说,指针指向原创 2009-10-16 10:18:00 · 871 阅读 · 0 评论 -
逗号表达式
在C语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把两个表达式连接起来组成一个表达式, 称为逗号表达式。其一般形式为:表达式1,表达式2其求值过程是分别求两个表达式的值,并以表达式2的值作为整个逗号表达式的值。原创 2009-10-16 23:29:00 · 645 阅读 · 0 评论 -
常见的排序算法的稳定性
若待排序的序列中,存在多个具有相同关键字的记录,经过排序, 这些记录的相对次序保持不变,则称该算法是稳定的;若经排序后,记录的相对 次序发生了改变,则称该算法是不稳定的。 不稳定的排序算法:快速排序、希尔排序、堆排序、简单选择排序稳定的排序算法:树形选择排序、冒泡排序、插入排序、归并排序、基数排序原创 2009-10-16 23:49:00 · 780 阅读 · 0 评论 -
当printf遇到了i++ 或++i
当printf遇到了i++ 或++i,会发生什么事情呢? 看看各大编译器对它的反应 # include main() { int i=1; int l, j, k; l=1; j=2; k=3; printf("%d %d %d", i , ++i, ++i); //3 3 2 under vc++ 6.0 and dev-c++, turbo c; 3 3 3 u原创 2009-11-03 09:18:00 · 2060 阅读 · 0 评论