面试宝典学习笔记---10月11日
2010-10-11 22:03
253 查看
/* 一个5位数字ABCDE*4 = EDCBA,这5个数字不重复,请编程求出这个5位数字 思想:针对每一个i即(ABCDE)求出对应的j(EDCBA),然后判断i*4与j是否相等,相等既满足条件 */ int main() { for (int i=10000; i<100000; i++) { int j = 0; int t = i; while (t != 0) { j = j*10 + t%10; t = t/10; } if ((i<<2) == j) { cout<<i<<endl; break; } } }
2、mutable的用法
/* 在const成员函数中,用mutable修饰成员变量后,就可以修改类的成员变量了。 */ class C { public: C(int c):m_c(c){} int c_add() const { return ++m_c; } int c_dec() const { return --m_c; } private: mutable int m_c; }; int main() { C c(10); cout<<c.c_add()<<endl; cout<<c.c_dec()<<endl; }
3、字节对齐问题‘
/* (1)、结构体的长度一定是最长的数据元素的整数倍。 (2)、数据对齐,是指数据所在的内存地址必须是该数据长度的整数倍。 (3)、在VC中,可以使用pack预处理指令来禁止对齐调整。 (4)、字节对齐是在编译器决定的,一旦决定就不会改变,在运行时不会改变。 (5)、静态变量是存放在全局数据区域的,而sizeof计算栈中分配的大小,所以static变量不会被计算在内。 (6)、c++在处理数据的时候经常把结构变量中的成员的大小按照4或8的倍数计算,这就叫数据对齐(data alignment)。 */ class A1 { public: int a; static int b; A1(){} ~A1(){} }; class A2 { public: double a; float b; int c; char d; A2(){} ~A2(){} }; int main() { struct A { short a; short b; short c; }; cout<<sizeof(A)<<endl;//sizeof(A)=6 cout<<sizeof(A1)<<endl;//sizeof(A1)=4因为static是存放在全局数据区域的,而sizeof计算栈中分配的大小,所以static变量不会被计算在内。 cout<<sizeof(A2)<<endl;//sizeof(A2)=24因为sizeof(double)=8,所以为了数据对齐,是按8个字节对齐的.(结构体的长度一定是最长的数据元素的整数倍) string *p = new string[2]; cout<<sizeof(p)<<endl;//sizeof(p)=4 cout<<sizeof(string)<<endl;//sizeof(string)=32 }
4、 sizeof运算符作用在继承上
/* 空类所占的空间为1个字节,单一继承的空类的空间也为1个字节, 多重继承空类的空间也为1个字节,但是虚继承涉及虚表(虚函数指针), 所以sizeof(C)=4 */ class A {}; class B : public A {}; class C : public virtual A {}; int main() { cout<<"sizeof(A)="<<sizeof(A)<<endl;//sizeof(A)=1 cout<<"sizeof(B)="<<sizeof(B)<<endl;//sizeof(B)=1 cout<<"sizeof(C)="<<sizeof(C)<<endl;//虚继承涉及虚表(虚函数指针)sizeof(C)=4 }
5、const常量赋值的时候,必须同时初始化。像const int a;这样是错误的。
6、char *str和char str[]的区别
/* char *str和char str[]的区别 */ char str[] = "wangyang";是分配一个局部数组 char *pstr = "wangyang";是分配一个全局数组 局部数组是局部变量,它对应的是内存中的栈。 全局数组是全局变量,它对应的是内存中的全局区域。 全局区域的值是不能修改的,如*pstr='c';是错误的。pstr占用一个存储区域。 局部数据区域的数据是可以修改的,str[0]='c';是正确的,str不占用存储区域的。 下面这个函数有问题 char *strA() { char str[] = "wangyang";//分配一个局部数组 return str;//返回的是局部变量的地址,这个局部变量在函数调用完后就释放了,所以返回的结果是不安全的。 } 可以改为 const char *strA() { char *str = "wangyang";//分配一个全局数组 return str; } 还可以该为 const char *strA() { static char str[] = "wangyang";//static开辟一段静态存储空间 return str; }
相关文章推荐
- 张孝祥Java面试宝典学习笔记---软件工程与设计模式(23种)
- JS宝典学习笔记(下)
- 微软面试100题学习笔记(1-5)
- 前端面试学习笔记之HTML
- 深度学习岗位面试问题整理笔记
- Java面试知识学习笔记1(2016/3/7)
- 算法面试-学习笔记-左旋转字符串
- 吕鑫MFC就业培训宝典学习笔记—创建一个简单的win32应用程序(2-1)
- js宝典学习笔记
- 学习笔记---工作和面试中的Sql题目和处理方法
- Java学习笔记(61)-----------40个Java集合面试问题和答案
- 设计模式C++学习笔记之十一(c/c++面试笔试题)
- 【学习笔记】面试中遇到的盲区(2)
- 面试问题总结(学习笔记)
- js宝典学习笔记,记录JAVA SCRIPT宝典中的内容
- Android(java)学习笔记232:远程服务之 IPC 和 AIDL (面试常问)
- GEEK学习笔记— —程序猿面试宝典笔记(二)
- Oracle 学习笔记:管理表 ---摘自《Oracle10g 宝典》
- Access 2007 宝典--学习笔记6(数据表视图)
- 面试宝典系列-读《深入学习Redis(3):主从复制》概要