文档详情

华清远见成都中心-C语言笔试题答案.pdf

发布:2025-06-06约5.66万字共36页下载文档
文本预览下载声明

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

显示全部
相似文档