您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 嵌入式软件工程师笔试题
3.二维数组空间的动态申请a.简单的,已经有一维,如char(*c)[5];c=newchar[n][5];//n为已定义的行数b.二维的int**p;p=newint*[m_row];//创建行指针for(inti=0;im_row;i++)//为每一行分配空间p[i]=newint[m_cols];写到某一个函数中:voidgetmemory(int**&p,intm_row,intm_cols){p=newint*[m_row];//创建行指针for(inti=0;im_row;i++)//为每一行分配空间p[i]=newint[m_cols];}释放空间:voiddeletememory(int**&p,intm_row){//释放每一行所分配的空间for(inti=0;im_row;i++)delete[]x[i];//释放行指针delete[]x;x=0;via嵌入式笔试两题-|yingwang294发表于2006-10-3110:40:00以下是威盛嵌入式笔试的最后两道小题题一:原题如下:改程序,并确定运行结果#includestdio.h#includestring.h#includemalloc.hchar*getstring(void){charp[]=helloeveryone;returnp;}char*getmemory(void){return(char*)malloc(10);}intmain(intargc,char*argv[]){char*p=getmemory();strcpy(p,helloworld);printf(%s,p);printf(%s,getstring());return0;}这个主要是charp[]前少一个static...题二:读程序,写出运行结果#includestdio.h#includestring.h#includemalloc.h#includeassert.htypedefstruct{intvalue;chartype;}head_t;这是什么东西啊?typedefstruct{head_thead;intpara;}message_t;voidmain(void){message_t*message=NULL;head_t*head=NULL;message=(message_t*)malloc(sizeof(message_t));assert(message);//测试的条件不成立则终止程序memset(message,0,sizeof(message_t));message-para=100;message-head.type='a';head=(head_t*)message;head-value++;head-type++;printf(message-head.value=%d,message-head.type=%c,message-para=%d\n,message-head.value,message-head.type,message-para);free(message);return;}#includeiostream#includestringusingnamespacestd;classStudent{public:Student(){}Student(conststring&nm,intsc=0):name(nm),score(sc){}voidset_student(conststring&nm,intsc=0){name=nm;score=sc;}conststring&get_name()const{returnname;}intget_score()const{returnscore;}private:stringname;intscore;};//outputstudent'snameandscorevoidoutput_student(constStudent&student){coutstudent.get_name()\t;coutstudent.get_score()endl;}intmain(){Studentstu(Wang,85);output_student(stu);}设计了一个类Student,数据成员有name和score,有两个构造函数,有一个设置成员数据函数set_student(),各有一个取得name和score的函数get_name()和get_score()。请注意get_name()和get_score()后面都加了const,而set_student()后面没有(也不能有const)。首先说一点题外话,为什么get_name()前面也加const。如果没有前后两个const的话,get_name()返回的是对私有数据成员name的引用,所以通过这个引用可以改变私有成员name的值,如Studentstu(Wang,85);stu.get_name()=Li;即把name由原来的Wang变成了Li,而这不是我们希望的发生的。所以在get_name()前面加const避免这种情况的发生。那么,get_name()和get_score()这两个后面应该加const的成员函数,如果没有const修饰的话可不可以呢?回答是可以!但是这样做的代价是:const对象将不能再调用这两个非const成员函数了。如conststring&get_name();//这两个函数都应该设成const型intget_score();voidoutput_student(constStudent&student){coutstudent.get_name()\t;//如果get_name()和get_score()是非const成员函数,这一句和下一句调用是错误的coutstudent.get_score()endl;}由于参数student表示的是一个对constStudent型对象的引用,所以student不能调用非const成员函数如set_student()。如果get_name()和get_score()成员函数也变成非const型,那么上面的student.get_name()和student.get_score()的使用就是非法的,这样就会给我们处理问题造成困难。因此,我们没有理由反对使用const,该加const时就应该加上const,这样使成员函数除了非const的对象之外,const对象也能够调用它。c/C++通用Makefile本文提供了一个用于对C/C++程序进行编译和连接以产生可执行程序的通用Makefile。在使用Makefile之前,只需对它进行一些简单的设置即可;而且一经设置,即使以后对源程序文件有所增减一般也不再需要改动Makefile。因此,即便是一个没有学习过Makefile书写规则的人,也可以为自己的C/C++程序快速建立一个可工作的Makefile。这个Makefile可以在GNUMake和GCC编译器下正常工作。但是不能保证对于其它版本的Make和编译器也能正常工作。如果你发现了本文中的错误,或者对本文有什么感想或建议,可通过whyglinuxAThotmailDOTcom邮箱和作者联系。此Makefile的使用方法如下:1.程序目录的组织尽量将自己的源程序集中在一个目录中,并且把Makefile和源程序放在一起,这样用起来比较方便。当然,也可以将源程序分类存放在不同的目录中。在程序目录中创建一个名为Makefile的文本文件,将后面列出的Makefile的内容复制到这个文件中。(注意:在复制的过程中,Makfile中各命令前面的Tab字符有可能被转换成若干个空格。这种情况下需要把Makefile命令前面的这些空格替换为一个Tab。)将当前工作目录切换到Makefile所在的目录。目前,这个Makefile只支持在当前目录中的调用,不支持当前目录和Makefile所在的路径不是同一目录的情况。2.指定可执行文件程序编译和连接成功后产生的可执行文件在Makefile中的PROGRAM变量中设定。这一项不能为空。为自己程序的可执行文件起一个有意义的名子吧。3.指定源程序要编译的源程序由其所在的路径和文件的扩展名两项来确定。由于头文件是通过包含来使用的,所以在这里说的源程序不应包含头文件。程序所在的路径在SRCDIRS中设定。如果源程序分布在不同的目录中,那么需要在SRCDIRS中一一指定,并且路径名之间用空格分隔。4.Makefile目标(Targets)下面是关于这个Makefile提供的目标以及它所完成的功能:omake编译和连接程序。相当于makeall。omakeobjs仅仅编译程序产生.o目标文件,不进行连接(一般很少单独使用)。omakeclean删除编译产生的目标文件和依赖文件。omakecleanall删除目标文件、依赖文件以及可执行文件。omakerebuild重新编译和连接程序。相当于makeclean&&makeall。下面提供两个例子来具体说明上面Makefile的用法。例一HelloWorld程序这个程序的功能是输出Hello,world!这样一行文字。由hello.h、hello.c、main.cxx三个文件组成。前两个文件是C程序,后一个是C++程序,因此这是一个C和C++混编程序。代码:/*Filename:hello.h*Cheaderfile*/#ifndefHELLO_H#defineHELLO_H#ifdef__cplusplusexternC{#endifvoidprint_hello();#ifdef__cplusplus}#endif#endif代码:/*Filename:hello.c*Csourcefile.*/#includehello.h#includestdio.hvoidprint_hello(){puts(Hello,world!);}代码:/*Filename:main.cxx*C++sourcefile.*/#includehello.hintmain(){print_hello();return0;}建立一个新的目录,然后把这三个文件拷贝到目录中,也把Makefile文件拷贝到目录中。之后,对Makefile的相关项目进行如下设置:代码:PROGRAM:=hello#设置运行程序名SRCDIRS:=.#源程序位于当前目录下SRCEXTS:=.c.cxx#源程序文件有.c和.cxx两种类型CFLAGS:=-g#为C目标程序包含GDB可用的调试信息CXXFLAGS:=-g#为C++目标程序包含GDB可用的调试信息由于这个简单的程序只使用了C标准库的函数(puts),所以对于CFLAGS和CXXFLAGS没有过多的要求,LDFLAGS和CPPFLAGS选项也无需设置。经过上面的设置之后,执行make命令就可以编译程序了。如果没有错误出现的话,./hello就可以运行程序了。如果修改了源程序的话,可以看到只有和修改有关的源文件被编译。也可以再为程序添加新的源文件,只要它们的扩展名是已经在Makefile中设置过的,那么就没有必要修改Makefile。C/C++程序员应聘试题剖析1.引言本文的写作目的并不在于提供C/C++程序员求职面试指导,而旨在从技术上分析面试题的内涵。文中的大多数面试题来自各大论坛,部分试题解答也参考了网友的意见。许多面试题看似简单,却需要深厚的基本功才能给出完美的解答。企业要求面试者写一个最简单的strcpy函数都可看出面试者在技术上究竟达到了怎样的程度,我们能真正写好一个strcpy函数吗?我们都觉得自己能,可是我们写出的strcpy很可能只能拿到10分中的2分。读者可从本文看到strcpy函数从2分到10分解答的例子,看看自己属于什么样的层次。此外,还有一些面试题考查面
本文标题:嵌入式软件工程师笔试题
链接地址:https://www.777doc.com/doc-2517901 .html