摘要:遇到了一个问题,讲了一个gcc -d的编译选项,之前没有用过的 gcc -D 在编译源文件的同时,进行宏定义。比如: gcc -Daa file.c 相当于在file.c中 #define aa
阅读全文
摘要:#include #include #include #include using namespace std; const int Max = 10000; char str[Max], name[Max], f1[Max], f2[Max], idNum[Max]; int main() { FILE *fd; if((fd = fopen("C:\\Users...
阅读全文
摘要:%x 默认去掉前导零 #include<stdint.h> #include<stdio.h> union X { int32_t a; struct { int16_t b; int16_t c; }; }; int main(){ X x; x.a=0x20150810; printf("%x,
阅读全文
摘要:遇到了一个神奇的事情: double遇到printf函数竟然是用%f输出的! scanf函数用%lf来读入double。 (严格地讲,%lf在printf下是未定义的,但是很多系统可能会接受它。要确保可移植性,就要坚持使用%f。)
阅读全文
摘要:函数原型: 关于void * 因为任何类型的指针都可以传入memset函数,这也真是体现了内存操作函数的意义,因为他操作的对象仅仅是一片内存,而不论这片内存是什么类型! void无类型,其实是一种类型上的抽象,它可以转换成任何类型! 函数原型: 函数原型: 实现过程主要注意:int范围是否合理(用l
阅读全文
摘要:关于STL用的很多比如map, vector, set, queue, stack等等。很少关注它的内存分配情况,但是经常遇到比如使用map,不停的在map中插入了一些很小的对象,然后释放了一些,然后想要再申请的时候出现了OutOfMemory的错误; 这是由于内存碎片化导致的。 STL分配内存的工
阅读全文
摘要:两者虽然打印出的地址值相同,但是还是有很大区别滴。 可以看到&a + 1是要跨越整个数组长度的! 84-70=14(Hex) = 20(dec) 刚好20/4(bytes/地址)=5个int型跨越完成!
阅读全文
摘要:关于红黑树和AVL树,来自网络: 1 好处 及 用途 红黑树 并不追求“完全平衡 ”——它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。 红黑树能够以 O(log2 n) 的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决。当然,还有一些更好的
阅读全文
摘要:问题描述: 当输出char的地址时,发现输出的是一个字符: 因为cout得到一个char类型的地址,默认当做字符串来输出的,所以会导致输出乱码. 使用char*类型指向ch,然后输出同样也会输出乱码. 解决办法: 将其转成void*(空指针)类型,这样就可以打印其地址.
阅读全文
摘要:用了一个小时研究了一下:C++函数指针在主函数和类成员函数中的使用。 代码如下:
阅读全文
摘要:判定多个条件时,遵循从左到右,短路原则。 Q: if ( conditionA && conditionB ) 和 if ( conditionA || conditionB ),是先判断conditionA还是conditionB ?跟编译器有没有关系? A: 先判断conditionA再判断co
阅读全文
摘要:结论就是:以后涉及到map.size()操作的话,必须要用Find,不要使用这种直接式的mp['c']的查询方式, 很危险。
阅读全文
摘要:#include #include #include using namespace std; template class A; template ostream &operator&obj); template class A{ public: A(int i):data(i){} friend ostream& operator(ostream &out,...
阅读全文
摘要:1.静态成员函数中不能调用非静态成员。2.非静态成员函数中可以调用静态成员。因为静态成员属于类本身,在类的对象产生之前就已经存在了,所以在非静态成员函数中是可以调用静态成员的。 3.静态成员函数只能访问静态类的原因:静态方法属于整个类,在对象创建之前就已经分配空间,类的非静态成员要在对象创建后才有内
阅读全文
摘要:一个函数在编译时会被分配给一个入口地址,这个入口地址就称为函数的指针,正如同指针是一个变量的地址一样。函数指针的用途很多,最常用的用途之一就是把指针作为参数传递到其他函数。显然,函数指针为我们编程提供了灵活性。
阅读全文
摘要:友元:友元函数 友元类。 友元函数:不属于任何类,只是在类中声明一下(可以放在 private 或者 public,没有区别),告诉这个类,这个函数是你的朋友,当然朋友不是白当的:这个函数可以访问你的私有成员变量! 毫无疑问,这破坏了类的封装性,可能出现安全问题,那又怎么样~ 毕竟还是朋友。 友元类
阅读全文
摘要:对于函数参数中的数组类型:传递的是数组地址,可以理解成传递的是对数组的引用。不是值传递,这是由C/C++函数实现机制决定的。一下三种函数生命完全等价: void func(int array[10]) void func(int array[]) void func(int *array) 测试代码
阅读全文
摘要:进程间的通信:传递一些变量来相互沟通; #管道 #有名管道 #信号量 #信号 #共享内存 #消息队列 #套接字 # 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。# 有名管道 (named pipe) :
阅读全文
摘要:"c 语言的精华在于指针的灵活性。学好指针的目的在于尽可能少的使用指针。" 在敲binary search tree(二叉查找树),遇到了问题。在删除的时候,如果删除的是root节点,那么要改变根节点的地址,在实现时会非常卵痛。后来发现有一种好的方法就是使用二级指针,这样可以轻松改变root节点的地
阅读全文
摘要:发现问题: 遇到了一个指针问题:我尝试用一个二维指针指向一个二维数组,发现编译不能通过。 eg: int vis[10][10], int **vis = vis; 问题分析: 后来发现 int** 是指向指针数组的指针,二维数组其实只是一个指针,而二级指针是指向指针的指针,所以二者并不等价。如上例
阅读全文