emcpy -------------------------------------------------------------------------- 12.下面代码有什么问题 #define MAX_SRM 256 DSN get_SRM_no() { static int SRM_no; //是不是这里没赋初值? int I; for(I=0;I{ SRM_no %= MAX_SRM; if(MY_SRM.state==IDLE) { break; } } if(I>=MAX_SRM) return (NULL_SRM); else return SRM_no; } 系统会初始化static int变量为0,但该值会一直保存,所谓的不可重入... -------------------------------------------------------------------------- 13.写出运行结果: {// test1 char str[] = "world"; cout << sizeof(str) << ": "; char *p = str; cout << sizeof(p) << ": "; char i = 10; cout << sizeof(i) << ": "; void *pp = malloc(10); cout << sizeof(p) << endl; } 6:4:1:4 -------------------------------------------------------------------------- 14.写出运行结果: {// test2 union V { struct X { unsigned char s1:2; unsigned char s2:3; unsigned char s3:3; } x; unsigned char c; } v; v.c = 100; printf("%d", v.x.s3); } 3 -------------------------------------------------------------------------- 15.用C++(www.cppentry.com)写个程序,如何判断一个操作系统是16位还是32位的?不能用sizeof()函数 A1: 16位的系统下, int i = 65536; cout << i; // 输出0; int i = 65535; cout << i; // 输出-1; 32位的系统下, int i = 65536; cout << i; // 输出65536; int i = 65535; cout << i; // 输出65535; A2: int a = ~0; if( a>65536 ) { cout<<"32 bit"<} else { cout<<"16 bit"<} -------------------------------------------------------------------------- 16.C和C++(www.cppentry.com)有什么不同 从机制上:c是面向过程的(但c也可以编写面向对象的程序);c++是面向对象的,提供了类。但是, c++编写面向对象的程序比c容易 从适用的方向:c适合要求代码体积小的,效率高的场合,如嵌入式;c++适合更上层的,复杂的; llinux核心大部分是c写的,因为它是系统软件,效率要求极高。 从名称上也可以看出,c++比c多了+,说明c++是c的超集;那为什么不叫c+而叫c++呢,是因为c++比 c来说扩充的东西太多了,所以就在c后面放上两个+;于是就成了c++ C语言是结构化编程(www.cppentry.com)语言,C++(www.cppentry.com)是面向对象编程(www.cppentry.com)语言。 C++(www.cppentry.com)侧重于对象而不是过程,侧重于类的设计而不是逻辑的设计。 -------------------------------------------------------------------------- 17.在不用第三方参数的情况下,交换两个参数的值 #include void main() { int i=60; int j=50; i=i+j; j=i-j; i=i-j; printf("i=%d\n",i); printf("j=%d\n",j); } 方法二: i^=j; j^=i; i^=j; 方法三: // 用加减实现,而且不会溢出 a = a+b-(b=a) 18.有关位域的面试题(为什么输出的是一个奇怪的字符) a.t = 'b';效果相当于 a.t= 'b' & 0xf; 'b' --> 01100010 'b' & 0xf -->>00000010 所以输出Ascii码为2的特殊字符 char t:4;就是4bit的字符变量,同样 unsigned short i:8;就是8bit的无符号短整形变量 -------------------------------------------------------------------------- 19.int i=10, j=10, k=3; k*=i+j; k最后的值是 60 -------------------------------------------------------------------------- 20.进程间通信的方式有 进程间通信的方式有 共享内存, 管道 ,Socket ,消息队列 , DDE等 -------------------------------------------------------------------------- 21. struct A { char t:4; char k:4; unsigned short i:8; unsigned long m; } sizeof(A)= (不考虑边界对齐) 7 struct CELL // Declare CELL bit field { unsigned character : 8; // 00000000 unsigned foreground : 3; // 00000 00000000 unsigned intensity : 1; // 0000 000 00000000 unsigned background : 3; // 0 0000 00000000 unsigned blink : 1; // 0000000 00000000 } screen[25][80]; // Array of bit fields 二、位结构 位结构是一种特殊的结构, 在需按位访问一个字节或字的多个位时, 位结构 比按位运算符更加方便。 位结构定义的一般形式为: struct位结构名{ 数据类型 变量名: 整型常数; 数据类型 变量名: 整型常数; } 位结构变量; 其中: 数据类型必须是int(unsigned或signed)。 整型常数必须是非负的整 数, 范围是0~15, 表示二进制位的个数, 即表示有多少位。 变量名是选择项, 可以不命名, 这样规定是为了排列需要。 例如: |