1.题目:判断ABCD四个表达式中值是否正确,若正确写出a的值。

int a=4;

A     a+=(a++);     先计算a++,这时候a的值还是4,第二次运算时a=a+(a++)=5+4=9

B     a+=(++a);     先计算++a,这时候a的值是5,第二次运算时a=a+(++a)=5+5=10

C     (a++)+=a;    错误,左侧不是一个有效变量,不能赋值,可改为(++a)+=a;答案为10

D     (++a)+=(a++); 先计算++a,a的值为5,然后再去计算a+=(a++),即5+6=11

2.

2.Double dArray[2] = {3,9},*p,*q;

p=&dArrary[0];

q=p+1;

cout<<q-p<<(int)q-(int)p;

答案:1 8

3.Char *p =(char*)malloc(100)

Memset(p,1,100);

Strcpy(p,”hello”);

Char str[]=”hello”;

Cout<<sizeof(p)<<strlen(p)<<sizeof(str)<<strlen(str);

答案:4 5 6 5

4..typedef struct s* TPS 与define DPS struct s* 哪个好?为什么?

这两种情况都的意图都是要定义dPS和tPS作为一个指向结构体s指针,typedef更好。

因为:DPS P1,P2;  Tps P3,P4;

第一个扩展为struct s* P1,P2;定义P1为一个指向结构的指针,P2为一个实际的结构;

第二个扩展为struct s* P3,struct s* P4;正确定义了P3,P4两个指针

5.myStruct *ptr;

 myStruct myArray[10];

 ptr=myArray;

下列哪个指向数组的第二个元素

A ++ ptr;

B ptr= ptr+sizeof(myArray);    

C ptr= ptr+sizeof(myStruct);

D ptr= ptr+sizeof(str);

选择A ,B应该为ptr= ptr+10/sizeof(myArray)

6.

2.char str[] = "abcde中国";

 cout << sizeof(str)<<endl;

答案:10,1个汉字占2个字节

7..Fun(int a)

{ Assert(a>=0);

}

Fun(int a)

{ Assert(a++>=0);

}

分析:Assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序。

使用Assert的缺点:频繁调用会极大影响程序性能,增加额外的开销。

用法总结与注意事项:

(1) 在函数开始处检查传入参数的合法性;

(2) 每个Assert只检查一个条件,因为同时检查多个条件时,如果断言失败,无法直观的判断是哪个条件失败;

(3) 不能使用改变环境的语句,因为Assert只在Debug下生效,如果这么做,会使程序正在运行时遇到问题。

错误:Assert(i++ <100)这是因为如果出错,比如执行前i=100,那么条件语句就不执行,那么i++这条命令就没有执行;

正确:Assert(i<100);i++

8.

Char str[]=”abc\0”

Sizeof(str);    答案:5   \0占一个空间

har str1[]=”abc\0d\e”

Sizeof(str1);   答案:7    \0、\e各占一个空间

?

9.1.哪些运算符不能重载

大部分的操作符是可以被重载的,例外的只有“.”、“::”、“?:”和“sizeof”。