
C/C++
文章平均质量分 71
orisun
数据挖掘
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
const学习大总结
const学习大总结 1.const int i=8; 常量在定义后不能更改,所以定义时必须初始化 2.const对象默认为头文件的局部变量 非const变量默认为extern。要使const变量能够在其他文件中访问,必须显式地指定它为extern。 //file_1.cc int counter; //file_2.cc extern int counter; ++counte原创 2013-01-05 18:22:42 · 279 阅读 · 0 评论 -
C语言内存泄漏之free、valgrind、examine
先来介绍valgrind和examine这两个工具的使用。 使用examine命令(简写是x)来查看内存地址中的值。x命令的语法如下所示:x/ n、f、u是可选的参数。n 是一个正整数,表示显示内存的长度。 f 表示显示的格式,其取值如下: x 按十六进制格式显示变量d 十进制u 十六进制无符号整型o 八进制t 二进制c 字符s 字符串f 浮点数i 指令 u 表示从当前地址往后请求原创 2013-01-05 18:29:29 · 388 阅读 · 0 评论 -
"abcde"是字符串常量
main(){ char *p1="abcde"; //p1是main函数中的局部变量,存放在栈区;"abcde"是字符串常量,存放在数据区 char *p2=(char*)malloc(10); //p2存放在栈区;malloc来的10个字节位于堆区 char *p3=dup(p1); //dup背后调用了malloc p1[0]='w'; //错误,字符原创 2013-01-05 18:29:38 · 539 阅读 · 0 评论 -
struct变量存储
在没有#pragma pack宏的情况下,结构体中的变量存储遵循以下对齐原则: 原则一:第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从其自身大小的整数倍开始。 原则二:结构体的总大小,也就是sizeof的结果,必须是其内部最大数据成员的整数倍,不足的要补齐。 原则三:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大数据成员大小的整数倍地址开始存储。原创 2013-01-05 18:32:00 · 545 阅读 · 0 评论 -
union变量存储
字节序 小端字节序(Little Edian)指低字节数据存放在内存低地址处,高字节数据存放在内存高地址处。比如整形1在内存中的存放情况是: 而换成大端字节序(Big Edian)则是: 基于Intel X86的体系结构的PC机是小端字节序,我们可以写一个程序来验证。 #include main(){ int num=1; int c=num>>24; pri原创 2013-01-05 18:32:02 · 488 阅读 · 0 评论 -
__stdcall和__cdecl的区别
__stdcall和__cdecl是两种函数名字修饰。(注意是连续的两个下划线) Windows上 windows上不管是C还是C++,默认使用的都是__stdcall方式。 不论__stdcall还是__cdecl函数参数都是从可向左入栈的,并且由调用者完成入栈操作。对于__stdcall方式被调用者自身在函数返回前清空堆栈;而__cdecl则由调用者维护内存堆栈,所以调用者函数生成的汇编原创 2013-01-05 18:32:09 · 504 阅读 · 0 评论 -
动态创建和释放二维数组
C动态创建和释放二维数组 #include #include #define ROW 5 #define COL 4 main(){ int i; int **arr; arr=(int **)malloc(ROW*sizeof(int*)); for(i=0;i<ROW;++i) arr[i]=(int*)malloc(COL*sizeof(int))原创 2013-01-05 18:23:03 · 336 阅读 · 0 评论 -
栈溢出
栈是从高地址向低地址方向增涨,堆的方向相反。 在一次函数调用中,栈中将被依次压入:参数,返回地址,EBP。如果函数有局部变量,接下来,就在栈中开辟相应的空间以构造变量。 在C语言程序中,参数的压栈顺序是反向的。比如func(a,b,c)。在参数入栈的时候,是:先压c,再压b,最后a。在取参数的时候,由于栈的先入后 出,先取栈顶的a,再取b,最后取c。 C语言是不作栈溢出检查,如下代码可以正常原创 2013-01-05 18:32:04 · 649 阅读 · 0 评论 -
C/C++面试题
1.求下面函数的返回值(微软) int func(x){ int countx = 0; while(x) { countx ++; x = x&(x-1); } return countx;} 假定x = 9999. 答案:8思路:将x转化为2进制,看含有的1的个数。 2. 什么是“引用”?申明和使用“原创 2013-02-25 10:30:05 · 744 阅读 · 1 评论 -
Linux上安装使用boost入门指导
获得boost boost分布 只需要头文件的库 使用boost建立一个简单的程序 准备使用boost二进制文件库 把你的程序链接到boost库 1.获得boost 下载boost_1_46_1.tar.bz2 解压 2.boost分布 boost_1_46_1.........................boost根目录 boost/..............原创 2013-01-05 18:26:26 · 363 阅读 · 0 评论 -
函数指针和指针函数
先说指针函数,这个简单,就是一个函数的返回类型是个指针嘛,如 int* f(x,y); 指向函数代码首地址的指针变量称为函数指针。 bool LC (string &, string &); //声明一个普通函数 bool (*pf) (string &, string &); //声明一个函数指针 下面的代码是合法的: bool b=LC(str1,s原创 2013-01-05 18:25:12 · 297 阅读 · 0 评论 -
全局变量用常量初始化----C和C++的不同
有两个程序: int i=10; int j=i+4; main(){} /***********************/ int i=10; main() {static int j=i;} /************************/ 如果把文件命名为.c,用gcc去编译会出现“initializer element is not constant原创 2013-01-05 18:23:01 · 403 阅读 · 0 评论 -
调试技术
GDB (gdb) r 65536 hello 带参数运行 可以用ps | grep ×××或pstree来查看进程ID attach 挂接已经运行的程序,即调试正在运行的程序 detach 取消挂载 watch 一旦表达式值有变化时,马上停止程序 gdb调试过程中查看源代码 list list list 单步调试可以用原创 2013-01-05 18:24:11 · 470 阅读 · 0 评论 -
Core Dump和/proc调试
Core Dump 通过Core Dump是事后调试(postmortem debug)。 首先把Core文件的大小设置为1024 orisun@zcypc:~$ ulimit -c 0 orisun@zcypc:~$ ulimit -c 1024 注意此修改仅在当前shell有效 root@zcypc:/home/orisun# echo "/corefile/core-%e-%p原创 2013-01-05 18:24:13 · 411 阅读 · 0 评论 -
C语言里的字符串
C语言里的字符串一定纠结了大家太多的感情。 1.char * char *buff="orisun"; sizeof(buff)=4 用32位存放一个指针 strlen(buff)=6 strlen返回字符串的实际长度,不包括末尾的'\0' 2.char [n] char bu[100]="orisun"; 从第7位到第100位都是'\0' sizeof(bu)=100 b原创 2013-01-05 18:24:56 · 585 阅读 · 0 评论 -
学习优秀源码
根据文件名的后缀,判断是不是图片 char *Pic_list[]={"jpg","bmp","png",NULL}; int isPic(char *name) { char **listwalk; int len; for (listwalk = Pic_list; *listwalk; listwalk++) { len = strlen(*listwalk)原创 2013-01-05 18:29:48 · 440 阅读 · 0 评论 -
变量的自动初始化
对于内置变量的自动初始化 代码1 1 #include 2 #define CONST 100 3 int *p1; 4 int a[2]; 5 int b; 6 static int c; 7 main() 8 { 9 int d; 10 static int e; 11 int f[2]; 12 int *p2;原创 2013-01-05 18:31:38 · 510 阅读 · 0 评论 -
std::string的共享内存和Copy-On-Write技术
简单来说,在复制一个对象时并不是真的在内存中把原来对象的数据复制一份到另外一个地址,而是在新对象的内存映射表中指向同原对象相同的位置,并且把那块内存的 Copy-On-Write 位设为 1。在对这个对象执行读操作的时候,内存数据没有变动,直接执行就可以。在写的时候,才真正将原始对象复制一份到新的地址,修改新对象的内存映射表到这个新的位置,然后往这里写。这个技术需要跟虚拟内存和分页同时使用,其好处原创 2013-01-05 18:23:37 · 477 阅读 · 0 评论 -
分配内存,并全部设置为0
1.void *calloc(size_t nmemb,size_t size); #include struct test { int a[10]; char b[20]; } main() { struct test *ptr=calloc(sizeof(struct test),10); } 2. #include void bzero(void *s,int n)原创 2013-01-05 18:24:20 · 475 阅读 · 0 评论 -
C++继承
先上一段代码: #include using namespace std; class Base{ public: int a; protected: int b; private: int c; }; struct Derived:public Base{ }; int main(){ Derived inst; cout<<sizeo原创 2013-01-05 18:32:07 · 432 阅读 · 0 评论 -
高频面试题
非常地失落,我觉得这些问题非常的无趣,所以不想挂在博客上。但是某公司每次都问这些问题,还是总结一下吧。 malloc/free和new/delete的区别 malloc/free是C语言的标准库函数,new/delete是C++的运算符。 由于malloc/free是库函数而不是运算符,不在编译器控制权限之内。 对于用户自定义的对象而言,用maloc/free无法满足动态管理对象的要原创 2013-02-25 10:31:03 · 534 阅读 · 0 评论