题目来自互联网:http://wenku.baidu.com/view/1b71537201f69e314332947f.html 答案:自己做的,可能有错误,请多指正。 QQ:447872587 C语言部分:语言部分 一、简单编程,请用一句语句完成下列操作 1. 位操作:将变量unsigned long register的0,4,6位清0 32位下:register&=0xffffffae 分析:0,4,6清0;10101110对应着:1010对应a; 1110对应e 2. 字符串操作:判断字符串char* str1是否起始位置包含char* str2的内容 if(strstr(str1,str2)==str1) 3. 内存操作:将指针unsigned char* ptr的内容向后移动4个字节 *(ptr+4)=*ptr; 4.将无符号变量unsigned int val进行字节序颠倒 (val&0x000000ff<<24)|( val&0x0000ff00<<8) |( val&0x00ff0000>>8)| ( val&0xff000000>>24) 二、写出下列程序的运行结果 32位 1、指针变量: Unsignedchar*p1; Unsignedchar*p2; p1=(Unsigned char*)0x801000; p2=(Unsigned char*)0x810000; 请问:p1+5=? p2+5=? p1+5=0x801000+5*4=0x801000+0x14=0x801014 p2+5=0x810005+5*4=0x810000+0x14=0x810014 2.算数运算 Main() { Unsignedchar a,b,c,d; a=30; b=a++; c=++a; d=10*(a++); } 请问:b=?c=?d=? b=30,c=32,d=3200 3、逻辑运算 unsigned int regval = 0x451AD,evenMask= 0x306,bitConvert = 0xFF; int event = 0,convert = 0; event = regval& bitConvert; convert = regval^ convert; 请问:event=? Convert=? event= 260 Convert=282962 分析:event=0x451AD&0x306, 0x 4 5 1 A D & 0x 3 0 6 = 0x 0 0 1 0 4 即:16*16+4=260 convert = 0x451AD ^ convert;
三、请指出下列程序存在的问题,如何修正: 1、说明:以下代码是把一个字符串倒序,如”abcd”倒序后变为”dcba” int _tmain(intargc, _TCHAR*argv[]) { char*src = "hello,world"; char *dest = NULL; intlen = strlen(src); char*dest = (char*)malloc(len); char*d = dest; char*s = src[len]; while(len-- != 0) { d++= s--; } printf("%s",dest); return0; } 正确应该为: [cpp] view plaincopy
方法二: [cpp] view plaincopy
四、简答题: 1、头文件的ifndef/define/endif干什么用的? 防止头文件被重复引用 2、定义函数局部变量的时候: Char array1[100]; Char *array2; array1和array2都可以当做指针引用,这两个指针在使用的时候有什么区别? 当做函数参数传递的时候,数组可以当指针用,本质就是取数组第一个元素的内存地址传过去,当数组作为函数参数传递的时,该数组自动退化为同类型的指针。 指针也可以当数组用,但是两者的本质不一样; 数组名对应着一块内存,而不是指向一块内存,其地址和容量在生命周期不变,但数组内容可以改变; 指针可以随时指向任意的内存块,其特征是可变,常用指针来操作动态内存。 五、内存问题: 很简单,不详述。 六、程序编写: 编写一个函数,输入参数为一个字符串指针,将其中的大写变为小写 [cpp] view plaincopy
|
|