C的笔试题总结1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C的笔试题总结1
这是⼀家公司的笔试题,我应聘的C开发⼯程师,10⽉31⽇当天晚上听宣讲会然后当场笔试,当时有点感冒,稀⾥糊涂的笔试就过了,⼈家在凌晨2点发短信通知⾃⼰第⼆天去⾯试,有技术⾯和HR⾯,虽然最终没通过,可是也敬佩这家公司的效率,下⾯是整理的部分笔试题,供参考。
⼀.选择题:
1.下⾯赋值语句正确的是: D. char a = '\103';
2.下⾯函数执⾏后的结果是:1, 2
1int a, x;
2
3for (a = 0, x = 0; a <= 1 && !x++;)
4 {
5 a++;
6 }
7
8 printf("a = %d, x = %d\n", a, x);
3.下⾯程序的运⾏结果是:8, 8
1int arr[] = {6, 7, 8, 9, 10};
2int *ptr = arr;
3
4 *(ptr++) += 123;
5 printf("%d, %d\n", *ptr, *(++ptr));
注意:1.这⾥修改的是arr[0]的值为129;
2.结果为8,8的原因在于函数参数⼊栈的顺序是从前往后的,⽽⾮优先级的影响。
4.下⾯说法错误的是: A、char *ptr = strdup ("iPanel"); ptr的地址指向iPanel常量的地址。
strdup函数的功能是将字符串拷贝到新建的位置。
⽤法说明如下:
1char *str = "iPanel";
2char *ptr;
3
4 ptr = strdup (str); //create a new postion
5
6 printf("%p, %p\n", str, ptr);
7 printf("%s, %s\n", str, ptr);
5.下⾯程序的运⾏结果是:cb ......\b为退格符
1 printf("ab\b\bc\n");
6.下⾯语句错误的是:ABCD,这⾥都是操作⾮法内存的现象
1 A.
2short a[4];
3int *b = (int *)&a[0];
4 memset(b, 0, 4 * sizeof(int));
1 B.
2short a[4];
3int *b = (int *)&a[2];
4 memset(b, 0, sizeof(a));
1 C.
2short a[4];
3int *b = (int *)&a[0];
4 b+=3;
5 *b = 2;
1 D.
2short a[4];
3int *b = (int *)&a[0];
4 b[3] = 2;
⼆:简答题
1.求*(p++)->a的值:
1struct tagValue{
2int a, *b;
3 }*p;
4int x[] = {1, 2}, y[] = {3, 4};
5static struct tagValue c[2] = {5, x, 6, y}, p=c;
我始终觉得上述代码本⾝存在⾄少两处错误,所以结果应该是error。
2.实现8字节对齐函数,即满⾜任意数能够被8整除。
1int ByteAlign(int n, int size)
2 {
3return ((n+size-1) & ~(size-1));
4//return (n+size-1)/size*size;
5 }
三、编程题
实现有序插⼊函数。
请把下列数组的元素全部插⼊到另外⼀个数组,并保持从⼩到⼤排列。
int a[] = {1, 2, 3, 4, 9, 5, 7, 0, 6, 8};。