笔试题2

来源:互联网 发布:学生电脑软件下载 编辑:程序博客网 时间:2024/06/15 17:35

1.要求逆序输出输入的字符串,并且不能用第三方变量

思想:递归

借助临时变量,将其字符串自身逆置

注意你要在reverse函数中对字符串进行改变,不能传字符串常量,因为在字符串常量区的字符串具有常性,不能修改,编译时会奔溃。可以传在栈区开辟的字符数组

2.有一个数组table,输出数组中有多少个元素

sizeof(table)/sizeof(table[0])

数组注意事项:数组名作为函数参数时候,系统会自动降级为指针

不能对数组名进行直接复制与比较。示例 2 7- 3- 2 中,若想把数组 a 的内容复制给数组的内容复制给数组 b ,不能用语句 b = a ,否则将产生编译错误。应该用标准库函数 strcpy复制。同理,比较 b 和 和 a 的内容是否相同,不能用 i f ( b==a) 来判断,应该用标准库函数 strcmp进行比较。

3.从标准输入读取n个整形,并将这n个整形存放在一个动态开辟的数组中,数组的第一个元素是整形的个数,以后依次是这些整形

1 2 3 4 5 6 7 8

8 1 2 3 4 5 6 7 8

4.编程题:输入一段字符串,并输出里面的字母个数,数字个数,空格个数,其他字符的个数

数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。

5.找错误

错误点:会出现乱码,返回了指向栈结构的"指针",在函数结束后栈区被系统释放。

正确理解指针参数是如何传递的:

1.试图用指针参数申请动态空间(不能完成)

把指针传进来,这种情况是值传递,形参相当于拷贝了一份实参,在GetMemory函数中,相当于只是给 p开辟空间,但是没有给实参开辟空间所以错误。

验证:如果指针值传递的话,只是指向同一块空间,但是要修改这个空间内容,必须空间不应该具有常性(char * str = "ABC"不行)

2.指向指针的指针动态开辟空间(可以完成)

址传递,相当于把str的地址传进来, p指向str , *p就是一级指针,对*p所指向的空间动态申请空间,相当于给str动态开辟空间

3.函数返回值来传递动态内存(可以完成)


在GetMerory函数中通过返回值开辟一个指定空间,然后再用str指向所开辟的空间,堆区开辟的空间要手动释放,free(str), 避免内存泄漏,str = NULL;赋空,,预防野指针。

原创粉丝点击