1、int i=i; ?
首先声明一个变量i,然后将变量i的值(未初始化)赋值给自己
2、下面代码的意义
void func(int x,int &count)
{
while(x)
{
count++;
x=x&(x-1); //求将x转换为二进制后包含1的个数
}
}
求一个整数转换为二进制之后包含多少个1
3、printf在VC6.0下是自右向左运算的(好像跟编译器有关)
int arr[]={6,7,8,9,10};
int *ptr=arr;
*(ptr++)+=123; //*ptr++123; ptr++;
printf("%d,%d\n",*ptr,*(++ptr)); //++ptr; *(ptr); *(ptr);
4、(int)a与(int&)a的区别
float a=1.0f;
cout<<(int)a<<endl; //1
cout<<(int&)a<<endl; //很大的一个数
cout<<boolalpha<<((int)a==(int&)a)<<endl; //fasle
float b=0.0f;
cout<<(int)b<<endl; //0
cout<<(int&)b<<endl; //0
cout<<boolalpha<<((int)b==(int&)b)<<endl; //true
(int)a 是取a的整数部分
(int&)a是取a在内存中存储的二进制格式,然后转换成int数值
5、如何快速取一个整数的7倍(利用位运算的高效)
x << 3 - x
6、判断一个数是不是2的n次幂
( ( x & (x-1) == 0 ) && x != 0 )
7、找错题
struct S
{
int i;
int * p;
};
int main()
{
S s;
int * p = &s.i; // &s.i的值实际就是 &s的值,p指向了结构体s的地址的起始位置
p[0] = 4;
p[1] = 3; // s.p指向0x00003
s.p = p; // s.p指向的是s的首地址,s.p[0]相当于s.i,s.p[1]相当于s.p
s.p[1] = 1; // s.p的值为1,也就是s.p指向内存的0x00001处,s.p[1]=*(s.p+1)=*(&s.i+1)=*(&s.p)=s.p=1
s.p[0] = 2; // s.p[0]=*(s.p+0)=*(1+0)=*1,s.p[0]=2的时候,访问地址为1的地方,而地址为1的内存不属于这个程序,出现访问非法内存的错误
return 0;
}