华清远见成都中心-C语言笔试题答案.pdf
C语言笔试题答案
一、简答题
1.程序的局部变量存在于(栈)中,全局变量存在于(静态区)中,动态申数据存在于
(堆)中。
2.设有以下说明和定义:
typedefunion{longi;intk[5];charc;}DATE;
structdata{intcat;DATEco;doubledog;}too;
DATEmax;
贝1」语句printfC^d;sizeoftstructdate)+sizeof(max));的执行结果是:
data是一个union,变量公用空间.里面最大的变量类型是屁⑸,占用20个字节;所以
它的大小是20。
data是一个struct,每个变量分开占用空间.依次为int4+DATE20+doubles=32.所以结
果是20+32=52.
3.32位系统下,问如下语句的值
unsignedchar*pl;
unsignedlong*p2;
pl=(unsignedchar*)0x801000;
p2=(unsignedlong*)0x810000;
问pl+5=0x801005
p2+5=0x810014
4.inti=10J=10,k=3;k*=i+j;k最后的值是?
答:60,此题考察优先级,实际写成:k*=(i+j);,赋值运算符优先级最低
5.#defineDOUBLE(x)x+x,i=5*DOUBLE(5);i是多少?
答案:i为30o
6.下面程序的输出是,为什么?
char*ptr;
if((ptr=(char*)malloc(0))==NULL)
(
puts(Gotanullpointer);
)
else
(
puts(Gotavalidpointer);
)
答:Gotavalidpointe
当malloc分配内存时它除了分配我们指定SIZE的内存块,还会分配额外的内存来存储
我们的内存块信息,用于维护该内存块。因此,malloc(0)返回一个合法的指针并指
向存储内存块信息的额外内存,我们当然可以在该内存上进行读写操作,但是这样做了
会破坏该内存块的维护信息,因此当我们调用free(ptr)时就会出现错误
在MSDN可以找到答案
原话是
Ifsizeis0,mallocallocatesazero-lengthitemintheheapandreturnsavalidpointe
rtothatitem
如果申内存大小为0,还是会返回一个有效指针
返回指针为NLL的条件是申一定大小内存,内存空间不够的时候
7.以下程序运行后的输出结果是。
main()
(
charm;
m=B+32;printf(%c\r