【C语言】猜数字游戏
函数是什么?
数学中我们常见到函数的概念,但是你了解C语言中的函数吗?
维基百科中对函数是如下定义的。
可以说函数function是计算机变成语言中非常重要的一环。如果我们想学好c语言,就必须学会如何使用库函数,以及如何创建自定义函数。
回溯
在我的【猜数字游戏】博客中,已经有讲述过如何查询库函数的定义。在上一篇【传值调用和传址调用】中也有与自定义函数相关的内容。
本篇博客将更细致地向初学c的伙伴们分享如何使用库函数。
库函数
库函数,是c语言库中已经包含了的函数。这些函数的作用不一,但他们都有一个共同点——所有人都用的上。
- 当你写出一串代码,肯定会想知道它运行的结果,这时候要用到 printf 来打印
大家第一个学习的hello world代码中就用到了 printf库函数 - 在编程过程中我们需要频繁地做字符串的拷贝 strcpy
既然所有人都用的上,那为什么不让这些函数变成编程语言中预设的功能,让后来者更方便的使用编程语言呢?这样效率倍增,可移植性和易用性也大大增强,何乐而不为。
库函数由此诞生
C语言常用的库函数
- IO函数
- 字符串操作函数
- 字符操作函数
- 内存操作函数
- 时间/日期函数
- 数学函数
- 其他库函数
在【猜数字游戏】中使用到的time函数是时间函数的一种
接下来我用两个函数的具体案例,和大家分享如何查找库函数定义以及如何尝试使用库函数
分别是 strcpy函数 和 memset函数
查询库函数定义
在这里给大家分享两个超棒的网站!
如果要查询库函数定义,cplusplus是我们的不二之选。它虽然只有英文,但是这难不倒我们代码人,实在不行就网页翻译一下嘛!
夹带私货时间
如果你用的是chrome或者微软最新的edge浏览器,可以尝试安装侧边翻译这个插件
非常好用,强力推荐!
memset函数
打开cplusplus,输入我们需要查询的函数
看不懂?没关系。只要了解下面几个简单的单词,我们就能尝试去读库函数的定义了
- function →函数
- Parameters →参数
- Return Value →返回值
- Example →例子
在页面的左边我们可以看到函数的头文件
需要注意的是,
是c++语言里的头文件,而左边的<string.h>才是我们c语言要用的头文件
cplusplus真正强大的地方,在于它可以让你直接在网页端编辑给出的代码例子
memset其实是由两个单词组成的,memeory内存 + set设置
读函数定义的文档的时候,最好是逐字解读,不要整句翻译。
注意每个函数下面绿色的这一行
以memset为例,void*表示它是指针变量,int表示整型,size_t表示大小
- Fill block of memory 填充内存块
- Sets the first num bytes 设置前num个字节
- Sets the first num bytes of the block of memory 设置内存块中的前num个字节
- pointed by ptr 由ptr指引的
- to the specified value 设置成特殊的value
连起来就是:
把由ptr指引的内存块的前num个字节设置成特殊的value
让我们继续解读
- ptr 要被填充的内存块的pointer指示器
- value 要被设定的特殊值,它是int整型
- num 有多少字节的内存要被设定成value
- size_t 无符号整型
读到这里,关于memset的定义我们就能大概了解了
接下来就要进入实践了
1 |
|
在使用memset的时候,我们遵循定义中的 ( void * ptr, int value, size_t num )方式
1 | memset(arr, '*', 5); |
- arr是我们要更改的内容
- ‘*’ 指我们把arr中的内容最终改成 ‘*‘
- 5 表示我们想更改5个字符的内容
- 用 printf 打印最终更改后的结果
运行的结果如下图所示
可以看到,hello world中的前五个字符,也就是hello被改成了*****
和memset的定义的描述完全一致!
怎样,是否有点小激动?(反正我当时学到这里的时候是有的)
让我们继续!
strcpy函数
比起memset函数,strcpy函数的使用频率更高
我们同样在cplusplus中查询strcpy函数的定义
我们依旧用上述说的逐步解读法来查阅strcpy的定义
- Copies the C string 拷贝内容
- pointed by source 由source指示的的内容
- into the array pointed by destination 到目标数组中
拷贝由source指示的内容到目标数组中
照样实践一下
1 |
|
(arr2, arr1) 其中arr2是我们的目标,arr1是我们要拷贝的内容
1 | strcpy(arr2, arr1); |
运行结果如下
当你看到这里的时候,肯定会有和我一样的疑惑:为什么拷贝到2中的内容只有bit三个字节,但是后续的#######
没有打印出来呢?
这里就涉及到转义字符里面的内容了
字符结束标志
\0
是字符串的结束标志,默认跟在我们输入的字符后面
“bit” 字符实际为 ”bit\0“
打印的时候遇到”\0“会自动停止
1 | char arr1[] = "bit"; |
与strcpy长得很像的还有另外一个库函数strlen
strcpy - string copy - 字符串拷贝
strlen - string length - 字符串长度有关
对于strcpy函数 和 memset函数 的介绍到这里就结束了
结语
到这里,对于查询库函数以及使用库函数的方法应该已经很清晰了(自我感觉 )
希望对大家有所帮助
c语言新人,有所纰漏在所难免,欢迎各路dalao无情指正!
纯手打,4k多字,今天效率比昨天高,2小时就搞定了
点个赞再走吧,谢谢大家!