【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 函数的定义
- 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 小时就搞定了
点个赞再走吧,谢谢大家!
- 最新
- 最热
- 最早
- 作者
点击重新获取 | 打开控制台