说到C语言,可能有人会觉得太简单了,没什么好说的。几道经典笔试题,助你顺利通过笔试1.下列说法错误的是(D)A.同名变量可以在不同的函数中使用B.函数中的形参存放在栈中C.函数中定义的变量只在本函数范围内有效D.函数内复合语句定义的变量在本函数范围内有效(复合语句值函数中由一对括号组成)注:项D是如果有错误,我给你举个例子#includeintman(){{inta=10;}printf("%d\n",a);return0;}如果这个再编译,肯定会出现undefinederror。2.#include#includeintmain(){inti;字符acNEW[20];对于(i=0;i<5;i++){acNEW[i]='0';}printf("%d\n",strlen(acNEW));系统(“暂停”);return0;}问题是求输出结果:这个答案应该不太确定,因为是给字符数组赋值的时候,'0'没有赋值,但是strlen函数认为结束条件是'0',所以当它读取最后一位数字时,它将继续前进,直到遇到“0”。因为后面的垃圾数据是随机的,所以strlen函数在读取的时候遇到'0'才会停止,所以答案是不确定的。3.全局变量可以定义在多个.c文件包含的一个头文件中吗?Error这个在编译的时候会报错,但是如果使用静态修饰,是可以编译通过的。4、X86下有这些程序:includeincludeintmain(){union{shortk;炭我[2];}*s,一个;s=&a;s->i[0]=0x39;s->i[1]=0x38;printf("%x\n",a.k);系统(“暂停”);return0;}}这道题问什么是输出?这里涉及到的知识点是关联和大小端存储,x86是小端存储,这种东西要背。.没办法,大家都知道union的空间是common对吧,short的长度是2B,chari[2]的长度也是2B。所以虽然你的a.k没有赋值,但是你输出了chari[2]数组的内容,虽然名字不一样,但是现在内容是一样的。这就考验了我们对大端和小端的概念。接下来下面是我画的这道题的理解图:大家都知道读取数据一般都是从高位读取。比如一个数字120,首先要看它最大的位置(高位),所以这道题的答案是3839,我截图验证一下:5.求下面程序的输出#include#includeintmain(){unsignedchara=200;无符号字符b=100;无符号字符c=0;c=a+b;printf("%d%d",a+b,c);系统(“暂停”);return0;}这道题主要考你对unsigned的理解,接下来我画个图帮助你理解我现在说的是吧?看一下输出结果6.在x86,vc++6.0环境下,有如下程序#include#includeintmain(){charc;无符号字符uc;未签名的空头我们;c=128;UC=128;我们=c+uc;printf("0x%x\n",我们);我们=(无符号字符)c+uc;printf("0x%x\n",我们);我们=c+(字符)uc;printf("0x%x\n",我们);系统(“暂停”);return0;}在做这道题之前,你应该知道char的取值范围是-128~127,所以当你把128赋值给uc时,它的真实值是-128。我对吗?查看运行结果。7.#include#includestructtagAAA{unsignedcharucld:1;无符号字符ucpara:2;无符号字符ucState:6;无符号字符ucTail:4;无符号字符ucAvail;无符号字符ucTail2;unsignedcharucData;}AAA_S1;structtagAAA2{unsignedintucld:1;无符号整数ucpara:2;无符号整数ucState:6;无符号整数ucTail:4;无符号整数ucAvail;无符号整数ucTail2;未签名;intmain(){printf("%d%d\n",sizeof(AAA_S1),sizeof(AAA_S2));系统(“暂停”);return0;}向AAA_S询问1字节对齐和四字节对齐的情况下,占用空间的大小:?答案是616。这道题是关于位域的。我有一个专门介绍结构对齐的博客。点此链接查看https://blog.csdn.net/Dawn_sf...8.#include#include#pragmapack(4);intmain(){unsignedcharpuc[4];结构sagPIM{unsignedcharucpim1;无符号字符ucDate:1;无符号字符ucDate1:2;无符号字符ucDate2:3;}*pstPimData;pstPimData=(structsagPIM*)puc;内存集(puc,0,4);pstPimData->ucpim1=2;pstPimData->ucDate=3;pstPimData->ucDate1=4;pstPimData->ucDate2=5;printf("%02x%02x%02x%02x\n",puc[0],puc[1],puc[2],puc[3]);系统(“暂停”);return0;}这里主要是位域,还有一些存储关系。因为按照位域存储,structure只需要2个字节就可以存储全部内容,接下来开始思考他的内部结构。我画个图就明白了。我们来看看运行结果。有图有真相。这些题都是历年笔试的必考题。里面涉及到的知识点一定要仔细阅读,才能通过笔试~~