第1页共54页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第1页共54页先发基本问题,再发编程问题
想成为嵌入式程序员应知道的0x10个基本问题:1:(void*)ptr和(*(void**))ptr的结果是否相同
其中ptr为同一个指针
(void*)ptr和(*(void**))ptr值是相同的2:intmain(){intx=3;printf("%d",x);return1;}问函数既然不会被其它函数调用,为什么要返回1
mian中,c标准认为0表示成功,非0表示错误
具体的值是某中具体出错信息1,要对绝对地址0x100000赋值,我们可以用(unsignedint*)0x100000=1234;那么要是想让程序跳转到绝对地址是0x100000去执行,应该怎么做
*((void(*)())0x100000)();首先要将0x100000强制转换成函数指针,即:(void(*)())0x100000然后再调用它:*((void(*)())0x100000)();用typedef可以看得更直观些:typedefvoid(*)()voidFuncPtr;*((voidFuncPtr)0x100000)();2,已知一个数组table,用一个宏定义,求出数据的元素个数#defineNTBL#defineNTBL(sizeof(table)/sizeof(table[0]))面试题:线程与进程的区别和联系
线程是否具有相同的堆栈
dll是否有独立的堆栈
进程是死的,只是一些资源的集合,真正的程序执行都是线程来完成的,程序启动的时候操作系统就帮你创建了一个主线程
每个线程有自己的堆栈
DLL中有没有独立的堆栈,这个问题不好回答,或者说这个问题本身是否有问题
因为DLL中的代码是被某些线程所执行,只有线程拥有堆栈,如果DLL中的代码是EXE中