1.i++和++i那个效率更高?
A:内建数据:只是对一个变量进行自增的时候(一员操作数),两者的区别不到;
B:自定义数据:主要是指类的时候,++i有天生的优势,因为它直接返回对象的引用,而i++是要先赋值然后再自增,多了复制数据的过程,使用该类型的时候要尽量使用++i;
2. bool、整型、浮点数、指针在if判断语句中比较合适的做法应该是什么?
A: bool flag
if ( flag )/ if ( !flag )
B: int flag与一个变量做对比 true
if ( flag == true ) / if ( flag != true )
C: float/double flag 与 0.0比较(有精度问题)
if (flag >= 0.0 )/ if (flag <= 0.0)
D:指针与空 pull
if ( pull != NULL) / if ( pull == NULL)
3. 无符号&有符号运算
#include <stdio.h>
char getchar1(int x, unsigned int y)
{
char c;
( x + y ) > 10 ? (c = 1): (c = 2 );
return c;
}
void main(void)
{
char c1,c2,c3,c4;
c1 = getchar1(-1,7);
c2 = getchar1(-9, 3);
c3 = getchar1(-7,6);
c4 = getchar1(-8, 7);
printf("c1 = %d,c2 = %d, c3 = %d, c4 = %d",c1,c2,c3,c4);
}
答案:2,1,1,1
结论:c中出现两种数据类型的时候都是先转换成较大范围的数据类型,题目中的unsigned 和signed都是先换成int,依负数为标准,当加上比自己绝对值小的数字时不会溢出,反而数值会变的很大,为什么会变成很大呢?内存中的数据形式依补码的方式运算;
4.不使用任何变量,对两个数据进行交换
A: swap1(int &a, int &b)
{
a=a+b;
b=a-b;
a=a-b;
}
B: swap2(int&a,int&b)
{
a^=b;
b^=a;
a^=b;
}
5. c/c++混合编程过程中,extern "C"{}作用
#extern "C"{
#endif
..........
#ifdef_cplusplus
}
c++中支持重载,不用extern "C",c中连接C++编译的符号时会发生找不到符号,产生连接错误;