足球比分直播

程序员笔试面试.doc

返回
程序员笔试面试.doc_第1页
第1页 / 共53页
程序员笔试面试.doc_第2页
第2页 / 共53页
程序员笔试面试.doc_第3页
第3页 / 共53页
程序员笔试面试.doc_第4页
第4页 / 共53页
程序员笔试面试.doc_第5页
第5页 / 共53页
点击查看更多>>
资源描述:
先发基本问题,再发编程问题..........想成为嵌入式程序员应知道的 0 x10 个基本问题1 void *ptr 和 *void**ptr 的结果是否相同其中 ptr 为同一个指针.void *ptr 和 *void**ptr 值是相同的2 int main{int x3;printf“d“,x;return 1;}问函数既然不会被其它函数调用,为什么要返回 1mian 中,c 标准认为 0 表示成功,非 0 表示错误。具体的值是某中具体出错信息1,要对绝对地址 0 x100000 赋值,我们可以用unsigned int*0 x100000 1234;那么要是想让程序跳转到绝对地址是 0 x100000 去执行,应该怎么做*void * 0 x100000 ;首先要将 0 x100000 强制转换成函数指针,即void *0 x100000然后再调用它*void *0 x100000;用 typedef 可以看得更直观些typedef void* voidFuncPtr;*voidFuncPtr0 x100000;2,已知一个数组 table,用一个宏定义,求出数据的元素个数define NTBLdefine NTBL sizeoftable/sizeoftable[0]面试题 线程与进程的区别和联系 线程是否具有相同的堆栈 dll 是否有独立的堆栈进程是死的,只是一些资源的集合,真正的程序执行都是线程来完成的,程序启动的时候操作系统就帮你创建了一个主线程。每个线程有自己的堆栈。DLL 中有没有独立的堆栈,这个问题不好回答,或者说这个问题本身是否有问题。因为 DLL中的代码是被某些线程所执行,只有线程拥有堆栈,如果 DLL 中的代码是 中的线程所调用,那么这个时候是不是说这个 DLL 没有自己独立的堆栈如果 DLL 中的代码是由 DLL自己创建的线程所执行,那么是不是说 DLL 有独立的堆栈以上讲的是堆栈,如果对于堆来说,每个 DLL 有自己的堆,所以如果是从 DLL 中动态分配的内存,最好是从 DLL 中删除,如果你从 DLL 中分配内存,然后在 中,或者另外一个DLL 中删除,很有可能导致程序崩溃unsigned short A 10;printf“A u\n“, A;char c128; printf“cd\n“,c;输出多少并分析过程第一题,~A =0 xfffffff5,int 值 为-11 ,但输出的是 uint。所以输出 4294967285第二题,c=0 x10,输出的是 int,最高位为 1,是负数,所以它的值就是 0 x00 的补码就是128,所以输出-128 。这两道题都是在考察二进制向 int 或 uint 转换时的最高位处理。分析下面的程序void GetMemorychar **p,int num{*pchar *mallocnum;} int main{char *strNULL;GetMemorystrcpystr,“hello“;freestr;ifstrNULL{strcpystr,“world“;} printf“\n str is s“,str;getchar;} 问输出结果是什么希望大家能说说原因,先谢谢了输出 str is world。free 只是释放的 str 指向的内存空间 ,它本身的值还是存在的 .所以 free 之后,有一个好的习惯就是将 strNULL.此时 str 指向空间的内存已被回收, 如果输出语句之前还存在分配空间的操作的话,这段存储空间是可能被重新分配给其他变量的,尽管这段程序确实是存在大大的问题(上面各位已经说得很清楚了) ,但是通常会打印出world 来。这是因为,进程中的内存管理一般不是由操作系统完成的,而是由库函数自己完成的。当你 malloc 一块内存的时候,管理库向操作系统申请一块空间(可能会比你申请的大一些),然后在这块空间中记录一些管理信息(一般是在你申请的内存前面一点) ,并将可用内存的地址返回。但是释放内存的时候,管理库通常都不会将内存还给操作系统,因此你是可以继续访问这块地址的,只不过。 。 。 。 。 。 。 。楼上都说过了,最好别这么干。char a[10],strlena为什么等于 15运行的结果include “stdio.h“include “string.h“void main{char aa[10];printf“d“,strlenaa;}sizeof和初不初始化,没有关系;strlen和初始化有关。char *str[20];/*str 是一个数组指针,即指向数组的指针.*/char *str[20];/*str 是一个指针数组,其元素为指针型数据.*/long a0 x801010;a50 x801010 用二进制表示为“1000 0000 0001 0000 0001 0000”,十进制的值为 8392720,再加上 5 就是 8392725 罗1给定结构 struct A {char t4;char k4;unsigned short i8;unsigned long m;};问 sizeofA 给定结构 struct A {char t4; 4 位char k4; 4 位unsigned short i8; 8 位 unsigned long m; // 偏移 2 字节保证 4 字节对齐}; // 共 8 字节2下面的函数实现在一个数上加一个数,有什么错误请改正。int add_n int n {static int i 100;i n;return i;}当你第二次调用时得不到正确的结果,难道你写个函数就是为了调用一次问题就出在 static 上// 帮忙分析一下includeinclude include include include include typedef struct AA{int b15;int b22;}AA;void main{AA aa;char cc[100];strcpycc,“0123456789abcdefghijklmnopqrstuvwxyz“;memcpycout 0 }分析struct bit { int a3; int b2; int c3; }; int main { bit s; char *cchar* coutint mainvoid {int **p;int arr[100];p return 0;}解答搞错了,是指针类型不同 ,int **p; //二级指针//得到的是指向第一维为 100 的数组的指针include int mainvoid {int **p, *q;int arr[100];q arr;p return 0;}下面这个程序执行后会有什么错误或者效果define MAX 255int main{unsigned char A[MAX],i;//i 被定义为 unsigned charfor i0;iinclude int mainvoid{int MAX 10;int *a int *mallocMAX * sizeofint;int *b;FILE *fp1;FILE *fp2;
展开阅读全文
收藏
下载资源

加入会员免费下载





足球比分直播