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”。