金山笔试

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分钟)。全体安全过桥。

待续。。。

你可能感兴趣的:(C++,金山)