1.求下面函数的返回值( 微软)
int func(int x) { int countx =0; while(x) { countx ++; x = x&(x-1); } return countx; }
思路:将x转化为2进制,看含有的1的个数。
2. 下面关于“联合”的题目的输出?
a)
#include <stdio.h> union { int i; char x[2]; }a; void main() { a.x[0] =10; a.x[1] =1; printf("%d",a.i); }
答案:266 (低位低地址,高位高地址,内存占用情况是Ox010A)
b)
int main() { union /*定义一个联合*/ { int i; struct /*在联合中定义一个结构*/ { char first; char second; }half; }number; number.i=0x4241; /*联合成员赋值*/ printf("%c%c ", number.half.first, mumber.half.second); number.half.first='a'; /*联合中结构成员赋值*/ number.half.second='b'; printf("%x ",number.i); getch(); return 0; }
答案: AB (0x41对应'A',是低位;Ox42对应'B',是高位)
6261 (number.i和number.half共用一块地址空间)
3. 已知strcpy的函数原型:char *strcpy(char *strDest, const char *strSrc)其中strDest 是目的字符串,strSrc 是源字符串。不调用C++/C 的字符串库函数,请编写函数 strcpy。
/* 编写strcpy函数(10分) 已知strcpy函数的原型是 char *strcpy(char *strDest, const char *strSrc); 其中strDest是目的字符串,strSrc是源字符串。 (1)不调用C++/C的字符串库函数,请编写函数 strcpy (2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值? 答:为了 实现链式表达式。 // 2分 例如 int length = strlen( strcpy( strDest, “hello world”) ); */ #include <assert.h> char* strcpy(char*strDest, const char*strSrc) { assert((strDest!=NULL) && (strSrc !=NULL)); // 2分 char *address = strDest; // 2分 while ((*strDest++=*strSrc++) !='