1.一些填空题
int funtest(int &a,char *b) { b[a++]=++a; return strlen(b); }
unsigned int a = 0x12345678;
printf("%x\n",*((unsigned char*)(&a)+1)+1);
//57
char str[]="abcdefghijklmn";
char *pchar = str;
int *pint = (int *)(str+4);
short int *pshort = (short int *)(str+3);
printf("%c%c%c\n",*(++pchar),*((char*)(++pint)),*((char*)(++pshort)));
//bif
int i=5,j=5;
cout<<(++i)--<<" "<<++(--j)<<endl;
//6,5
int as=1;
char ch[4]={0};
int c=funtest(as,ch);
cout<<dec<<as<<" "<<(int)ch[0]<<" "<<(int)ch[1]<<" "<<(int)ch[2]<<" "<<(int)ch[3]<<" "<<c<<endl;
//3 0 0 2 0 0
有些难度,大家好好想想!
int a[4][4] = { {1,2,3,4}, {50,60,70,80}, {900,1000,1100,1200}, {13000,14000,15000,16000} }; int (*p1)[4] = a; //p1为指向一维数组指针 所以a+1指向{50,60,70,80},减1则为4的地址 int (*p2)[4] = &a[0]; //同理p2也是,故p2 - 1,即向前移动4个,+16即向先后移动16个地址,故*(p2)+12 int *p3 = &a[0][0]; //p3就是单个元素的地址 cout<<*(*(a + 1) - 1)<<" "<<*(*(p1 + 3) - 2) + 1 <<" "<<*(*(p2 - 1) + 16) + 2<<" " <<*(p3 + sizeof(p1) - 3)<<endl; //结果为 4 1101 13002 2
double arr[2]={4,8},*p,*q; p=&arr[0]; q=p+1; cout<<q-p<<endl; cout<<(int)q-(int)p<<endl; //1 8
2、有四个人要在夜里穿过一条悬索桥回到宿营地。可是他们只有一支手电,电池只够再亮17分钟。过桥必须要有手电,否则太危险。桥最多只能承受两个人同时通过的重量。这四个人的过桥速度都不一样:一个需要1分钟,一个需要2分钟,一个需要5分钟,还有一个需要10分钟。他们如何才能在17分钟之内全部过桥?
答案:1和2一起过(2分钟);1返回(3分钟);5和10一起过(13分钟);2返回(15分钟);1和2一起过(17分钟)。全体安全过桥。
待续。。。