随笔分类 - c语言
1
摘要:面试题目:输入两颗二叉树A,B,判断B是不是A的子结构;#include <iostream>#include <stack>using namespace std;typedef struct BinaryTreeNode{ int value; BinaryTreeNode * lchild; BinaryTreeNode *rchild;}BinaryTreeNode;typedef BinaryTreeNode * BiTree;void CreateBiTreeByLevel(BiTree &t,int Array[],int i,int len){
阅读全文
摘要:题目:实现一个函数,输出该数二进制表示中1的个数由于要考虑到负数等问题对数n移位,不能解决负数问题:解法1 flag = 1,向左移动flagint coutNumber1fun1(int n)
{ unsigned int flag = 1; int cout = 0; while(flag) { if(n&flag)cout++; flag = flag << 1; } return cout;
}解法2:利用:把一个整数减去1再和原来的整数做位运算,得到的结果相当于把整数的二进制表示中,最右边的一个1变成0int coutNumber1fun2(int n)
{ i.
阅读全文
摘要://值传递
void swap1(int p,int q)
{ int temp; temp = p; p = q; q = temp;
}
//指针传递(地址传递)
void swap2(int *p,int *q)//不正确
{ int *temp; //定义了指针,但并没有为指针指向的内容分配内存 *temp = *p;// 拷贝p指的内存到temp指向的内存,但temp指向的内存并没有分配 *p = *q; *q = *temp;
} void swap3(int *p,int *q)//不正确,改变形参的值,没有改变实参的值原因http://blog.csdn.n...
阅读全文
摘要:1:怎样样在main函数未开始之前,执行一个函数呢?利用全局变量+类的构造函数 1 #include <iostream> 2 using namespace std; 3 class A{ 4 public: 5 A(int m); 6 }; 7 A::A(int m) 8 { 9 cout<<"constructor fun"<<m<<endl;10 }11 A a(10);//先调用构造函数12 int main()13 {14 cout<<"mian"<<endl;15 sy
阅读全文
摘要:1,void GetMemory(char *p, int num){ p = (char *)malloc(sizeof(char) * num);}void Test(void){ char *str = NULL; GetMemory(str, 100); // str 仍然为 NULL strcpy(str, "hello"); // 运行错误} 原因:编译器总是要为函数的每个参数制作临时副本,指针参数p的副本是_p,编译器使_p = p。如果函数体内的程序修改了_p的内容,就导致参数p的内容作相应的修改。这就是指针可以用作输出参数的原因。在本例中,_p申请了新的内
阅读全文
摘要:1:函数原型void * memcpy ( void * destination, const void * source, size_t num );函数作用参考:http://www.cplusplus.com/reference/clibrary/cstring/memcpy/Copy block of memoryCopies the values ofnumbytes from the location pointed bysourcedirectly to the memory block pointed bydestination.The underlying type of t
阅读全文
摘要:int atoi(const char * str);函数说明参考:http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/功能:将str里整数字符,翻成整数该函数:1:忽略开始的空白字符串,知道非空白的字符开始转换2:处理正负+ - 字符3:如果字符串为空,或者字符串里首字符不为数字或者正负号,不做转换Return ValueOn success, the function returns the converted integral number as anintvalue.If no valid conversion could
阅读全文
摘要:来自http://dongxicheng.org/structure/permutation-combination/参考http://blog.csdn.net/whoismickey/article/details/3907334http://www.cnblogs.com/wonderKK/archive/2012/04/05/2433694.htmlhttp://www.cnblogs.com/nokiaguy/archive/2008/05/11/1191914.html1全排列算法(1) 字典序法对给定的字符集中的字符规定了一个先后关系,在此基础上按照顺序依次产生每个排列。[例]字
阅读全文
摘要:栈:先进后出队列:先进先出1:两个队列实现栈:队列A队列B入栈:入队列A, 1,2,3,4 入栈,在队列A里为 A: 1,2,3,4出栈,将队列A中的元素入队列B直到队列A里的元素只剩下一个,则队A为4,队B为1,2,3,A:4,B:1,2,3,输出A队头4#include <queue>
#include <iostream>
using namespace std;
queue<int> A,B;
void PushStack(int value)//向非空的那个队列入队
{ if (!A.empty()==true&&B.empty()
阅读全文
摘要:二叉树的操作参考:[1]http://www.cnblogs.com/dolphin0520/archive/2011/08/25/2153720.html [2]http://www.bccn.net/article/kfyy/sjjg/200706/4585.html#include"stdio.h"
#include<iostream>
#include<stack>
using namespace std;
//数据结构
typedef struct node
{ int value; struct node *lchild; struct
阅读全文
摘要:内容来自《21天C++》和《efective c++》c风格的类型转换char * pszString = "hello world!";int* pBuf = (int *)pszString;c风格的类型转换实际上是强迫编译器根据程序员的选择来解释目标对象C++提供了一种新的类型转换运算符,专门用于继承的情形,这种情形在c中并不存在4个类型转换运算符如下:const_cast 通常用来将对象的常量性转除(cast away the constness)。它是唯一有此能力的C++-style转型操作符。dynamic_cast用来执行继承体系中安全的向下转型或跨系转型动作
阅读全文
摘要:1:数组越界和unsigned char#define MAX 255
void main()
{
unsigned char i; unsigned char A[MAX]; for(i = 0; i <= MAX; i++)//i达到255后,加1变为0,无线循环下去 { A[i] = i; printf("*%d*",A[i]); }
}两个问题:数字越界和无限循环,char的范围[-128,127],unsigned char [0,255],--------------------------------------------------------...
阅读全文
摘要:指针不仅可以指向数据,也可以指向函数,假设编写了integrated的函数用来求a和b点之间的函数f的积分。我们希望函数integrate通过传递f作为实际参数的方式变得更为通用函数integrate的原型如下:double integrate( double (*f)(double),double a, double b);在*f周围的圆括号说明f是个指向函数的指针,而不是函数的返回值为指针,把f声明成好像就是函数也是合法的double integrate( double f(double),double a, double b);在编译器看来,这种原型和前一种形式是完全一样的在调用函数in
阅读全文
摘要:STL里的位标识类,<bitset>STL bitset是一个STL类,用于处理以位和位标志表示的信息,std::bitset不是STL容器类,因为它不能调整长度,也不具备容器的其他特征(见容器特征),如通过迭代器进行访问。这是一个实用类,针对处理长度在编译阶段已知的位序列进行了优化。示例:#include <iostream>
#include <bitset>
#include <string>
int main()
{ bitset<8> eightBits; cout<<"The initial cont
阅读全文
摘要:vim 已经安装 vim -v 查看1:sudo apt-get install vim-addon-manager2:sudo apt-get install vim-scripts3:vim-addons status显示系统中安装了哪些扩展,哪些是对当前用户开启的,哪些是禁用的4sudo apt-get install exuberant-ctags5vim-addons install taglist 安装taglist参考:http://www.cppblog.com/Charlib/archive/2010/02/21/vim_ctags_taglist_begin.html参考:
阅读全文
摘要:1:switch()后必须是整形表达式,c语言把字符当成整形,所以可以处理字符,但是浮点型和字符串不可以2:char str = “xiaobo” sizeof(str)为7 有\0的长度3:http://blog.csdn.net/Veini/article/details/56338744:当数组作为函数的形式参数时,可以(而且是通常情况下)不说明数组的长度,例如 int fun(int a[ ]);当需要知道数组的长度时,需要另外一个参数指明其长度void fun(int a[])
{ int n = sizeof(a);//输出4 a[0] printf("%d",
阅读全文
摘要:源自《c语言深度剖析》指针和数组的对比区别:1:存储的内容指针:保存数据的地址,任何存入指针变量p的值都会被当做地址来处理,p本身的地址,由编译器另外存储,存储在哪里 我们并不知道数组:保存数据,数组名a代表的是数组首元素的首地址,&a是整个数组的首地址,即这个对象的地址,a本身的地址由编译器另外存储,存在哪里我们并不知道2:访问数据的方式:----------------------------------------------------------------------------------------------------------------------------
阅读全文
摘要:1:字符串字面量char *p;p = "abc"// p指向字符串第一个字符char ch;ch = “abc”[1];//字符串字面量添加下标,c语言允许给指针添加下标只包含一个字符的字符串字面量不同于字符常量,字符串字面量“a”是用来指针来表示,字符常量 用整数表示(字符的ASCII值)2,字符串的输出printf 和 putschar str[ ] = "I am a student";printf("%s",str);printf("%.3s\n",str);puts(str) // puts在输出结束后
阅读全文
摘要:大端模式:低字节存储在高地址小端模式:低字节存储在低地址例如 int i = 1;占4个字节大端模式:低地址 ---- 0x0 0x0 0x0 0x1 ---高地址小端模式:高地址-----0x0 0x0 0x0 0x1 ----低地址程序检测:#include"stdio.h"
//方法1
void checkSysetem1()
{ unsigned short usData = 0x1122; unsigned char *pucData ; pucData = (unsigned char*)&usData;//short两个字节,强制转换为char 1个字
阅读全文
摘要:C语言有以下几种取整方法:1、直接赋值给整数变量。如:int i = 2.5; 或 i = (int) 2.5;这种方法采用的是舍去小数部分,可以用于你的问题。2、C/C 中的整数除法运算符“/”本身就有取整功能(int / int),而下面介绍的取整函数返回值是double。整数除法对正数的取整是舍去小数部分,可以用于你的问题。但是整数除法对负数的取整结果和使用的C编译器有关。3、使用floor函数。floor(x)返回的是小于或等于x的最大整数。如:floor(2.5) = 2floor(-2.5) = -34、使用ceil函数。ceil(x)返回的是大于x的最小整数。如:ceil(2.5
阅读全文
1
浙公网安备 33010602011771号