##########程序员面试宝典######
1 赋值语句
int i=1;
void main()
{
int i=1;
}
main 里面的i 在声明的那一刻开始 在main中已经是可见的了,main里的i和main外面的i没有关系,是一个未定义的值。
2 赋值语句
int main()
{
int x=2,y,z;
x*=(y=z=5);cout<<x<<endl; //5赋值给z z赋值给y x=x*y x=10
z=3;
x==(y=z);cout<<x<<endl; //x赋值给y x与y比较是否相等 x的值没变 x=10
x=(y==z);cout<<x<<endl; //y与z比较相等 返回1 1 赋值给x x=1
x=(y&z);cout<<x<<endl; //y与z进行按位与,0011&0011 结果为 0011 赋值给x x=3
x=(y&&z);cout<<x<<endl; //y与z进行与运算 返回为真 赋值给x x=1
y=4;
x=(y|z);cout<<x<<endl; //y(0100)与z(0011)进行按位或 结果为0111 赋值给x x=7
x=(y||z);cout<<x<<endl; //y与z进行或 返回真 赋值给x x=1
return 0;
}
int main()
{
int a,x;
for(a=0,x=0;a<=1&&!x++;a++)
a++;
cout<<a<<x<<endl;
return 0;
}
初始化a x为0; a<=1成立; !x 为 真; x++ ,x值变为1; 运行循环语句a++,a值变为1; 执行for里面的a++,a的值变为2;
第二次循环条件判断,a<=1 不成立; 此时a=2,x=1;
int main()
{
int a,x;
for(a=0,x=0;a<=1&&!x++;)
a++;
cout<<a<<x<<endl;
return 0;
}
初始化a x为0; a<=1成立; !x 为 真; x++ ,x值变为1; 运行循环语句a++,a值变为1;
第二次循环条件判断,a<=1 成立; !x 为 假;x进行自增,x值变为2;此时a=1,x=2;
4 i++
int main()
{
int arr[]={6,7,8,9,10};
int *ptr=arr;
*(ptr++)+=123; //ptr起初指向6 *(ptr)+=123,arr第一个元素变成129,然后ptr++,指向arr的第二个元素
printf("%d,%d\n",*ptr,*(++ptr));//词语局从右向左运算,先执行*(++ptr)ptr指向第三个元素,取引用后两者都输出8
return 0;
}
5 类型转换
int main()
{
float a=1.0f;
cout<<(int)a<<endl;
cout<<&a<<endl;
cout<<(int&)a<<endl; //首先对float型变量取地址,强制类型转换为整形变量的地址,将该变量的地址输出
cout<<boolalpha<<((int)a==(int&)a)<<endl; //将布尔值转换为 false或 true输出
float b=0.0f;
cout<<(int)b<<endl;
cout<<&b<<endl;
cout<<(int&)b<<endl;
cout<<boolalpha<<((int)b==(int&)b)<<endl;
return 0;
}
6类型转换
int main()
{
unsigned int a=0xFFFFFFF7;
unsigned char i=(unsigned char)a; //unsigned int型转化成unsigned char型时截断只留下后两个字节
char *b=(char*)&a; //将char 指针类型的 b 强制的 指向a
printf("%08x,%08x",i,*b); //结果为000000f7 fffffff7
return 0;
}
7运算符问题
int main()
{
unsigned char a=0xA5; //表达是0000 0000 1010 0101
unsigned char b=~a>>4+1; //取反为 1111 1111 0101 1010 右移5位 0000 0111 1111 1010 赋值给b 留下后8位为250
printf("b=%d",b);
return 0;
}