考卷

来源:互联网 发布:ubuntu qq 国际版 编辑:程序博客网 时间:2024/06/11 10:41

一、简单题(20

1、请问int *p char *p 分别占几个字节?为什么?

2、请简述sizeofstrlen的区别

3、请简述用户空间的内存分配及各空间保存的数据类型

4、请说明全局变量和局部变量的区别

 

二、程序阅读题(30分)

1、请问以下代码输出结果是什么

int i = 1;

void main()

{

int i = i;

}

 

2、阅读以下程序

#include <stdio.h> void swap4(int *p,int *q)

void swap1(int p,int q) {

{ int temp;

int temp; temp = *p;

temp = p; *p = *q;

p = q; *q = temp;

q = temp; }

}

int main()

void swap2(int *p,int *q) {

{ int a = 1,b = 2;

int *temp; //swap1(a,b);

*temp = *p; //swap2(&a,&b);

*p = *q; //swap3(&a,&b);

*q = *temp; //swap4(&a,&b);

} printf(“after swap:a = %d,b = %d\n”,a,b);

return 0;

void swap3(int *p,int *q) }

{

int *temp;

temp = p;

p = q;

q = temp;

}

请问此程序哪个函数能将a,b的值正确交换,简述四个函数或成功或不成功的原因

 

三、编程题

1、请完成void swap(char src[],char dest[],int n)函数,实现从src中拷贝n个字符到dest中,若src中字符少于n个,则在dest中循环补字符src

2、请写出程序实现输入n个整形数,再将这些整形数排序后从小到大输出

3、观察下列数字,找出规律,并写出代码输出前10

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

...



答案:

一、

1、都占4字节,32位操作系统指针固定长度为4字节

21.sizeof是运算符,strlen是函数

2.sizeof计算开辟的空间,strlen计算实际长度检索到'\0'停止

3.sizeof可以用类型做参数,而strlen只可以用char *做参数

4.数组做sizeof的参数不退化,传递给strlen就退化为指针了。

5.sizeof在编译时执行,strlen在程序运行时执行

3、 堆:malloc,ralloc,clloc

栈:局部变量,函数形参,自动变量

全局数据区:static,全局变量

代码段

4、(1全局变量存放在数据区,局部变量存放在栈空间。、

2)局部变量的生命周期是所在函数结束后释放,全局变量的生命周期是 整个程序结束后释放。

3)局部变量未初始化,系统自动初始化为随机值;全局变量未初始化,系统自动初始化为0

二、

1、imain函数里定义的局部变量,是未定义值

2swap4可以

swap1中交换的局部变量的值

swap2temp为野指针,容易造成内存泄露

swap3中只是交换了p,q的地址,使q指向ap指向bab的值并没有交换


0 0