掌握 C 中的字符指针和函数用法
C 中的字符指针是什么?
一个字符指针 存储字符类型的地址或字符数组(字符串)的第一个字符的地址。当您操作字符串时,字符指针非常有用。
C 中没有字符串数据类型。“char”类型的数组被视为字符串。因此,char类型数组的指针代表一个字符串。然后可以将该字符指针作为参数传递给用于处理字符串的函数。
声明字符指针
字符指针指向字符或字符数组。因此,要声明字符指针,请使用以下语法:
<前>01前>初始化字符指针
声明字符指针后,需要使用字符变量的地址对其进行初始化。如果有字符数组,您可以简单地通过提供字符数组的名称或其第一个元素的地址来初始化字符指针。
字符的字符指针
以下是初始化字符类型的字符指针的语法:
<前>10前>字符数组的字符指针
以下是初始化字符数组(字符串)的字符指针的语法:
<前>28前>字符指针示例
在下面的示例中,我们有两个变量字符和字符数组。我们使用两个指针变量来存储字符和字符数组的地址,然后使用字符指针打印变量的值。
<前>32前>输出
运行代码并检查其输出 -
<前>40前>理解字符指针
字符串被声明为数组,如下所示 -
<前>58前>该字符串是一个以 NULL 结尾的字符数组。上述数组中的最后一个元素是 NULL 字符 (\0)。
声明一个 char 类型的指针,并为其指定第 0 个位置的字符的地址 -
<前>61前>请记住,数组本身的名称是第 0 个元素的地址。
<前>73前>可以使用指针而不是数组变量(无方括号)来声明字符串。
<前>80前>这使得字符串被存储在内存中,并且其地址存储在 ptr 中。我们可以通过递增ptr来遍历字符串。
<前>90前>访问字符数组
如果使用 %s 格式说明符打印字符数组,则可以使用字符指针的名称来完成。但如果要访问字符数组的每个字符,则必须在字符指针名称前使用星号 (*),然后递增。
示例
这是完整的程序代码 -
<前>107前>输出
运行代码并检查其输出 -
<前>115前>示例
或者,将 ptr 以 %s 格式传递给 printf() 以打印字符串。
<前>120前>输出
运行此代码时,您将得到相同的输出 -
<前>134前>字符指针函数
“string.h”头文件定义了许多执行字符串处理的库函数,例如查找字符串的长度、复制字符串以及比较两个字符串。这些函数使用 char 指针参数。
strlen() 函数
strlen() 函数返回长度,即字符串中的字符数。 strlen()函数的原型如下 -
<前>147前>示例 1
下面的代码展示了如何打印字符串的长度 -
<前>159前>当您运行此代码时,它将产生以下输出 -
<前>166前>示例 2
实际上,strlen() 函数根据用户定义的函数 str_len() 计算字符串长度,如下所示 -
<前>179前>当您运行此代码时,它将产生以下输出 -
<前>186前>strcpy() 函数
赋值运算符 ( =) 不用于将字符串值分配给字符串变量(即 char 指针)。相反,我们需要使用带有以下原型的 strcpy() 函数 -
<前>197前>示例 1
以下示例展示了如何使用 strcpy() 函数 -
<前>202前>strcpy() 函数返回指向目标字符串 ptr1 的指针。
<前>210前>示例 2
在内部,strcpy() 函数在用户定义的 str_cpy() 函数中实现了以下逻辑 -
<前>229前>当你运行他的代码时,它将产生以下输出 -
<前>238前>该函数将源字符串中的每个字符复制到目标字符串,直到到达 NULL 字符“\0”。循环结束后,它会在目标数组末尾添加一个“\0”字符。
strcmp() 函数
不允许使用常用的比较运算符(<、>、<=、>=、==和 !=)来比较两个字符串。相反,我们需要使用“string.h”头文件中的 strcmp() 函数。该函数的原型如下 -
<前>242前>strcmp() 函数有三个可能的返回值 -
- 当发现两个字符串相同时,返回“0”。
- 当 str1 中第一个不匹配字符的 ASCII 值大于 str2 中相应字符的 ASCII 值时,该函数返回正整数。这意味着 str1 按字母顺序出现在 str2 之后,就像在字典中一样。
- 当 str1 中第一个不匹配字符的 ASCII 值小于 str2 中相应字符的 ASCII 值时,该函数返回负整数。这意味着 str1 按字母顺序出现在 str2 之前,就像在字典中一样。
示例 1
以下示例演示了如何在 C 程序中使用 strcmp() 函数 -
<前>251前>运行代码并检查其输出 -
<前>266前>将 s1 更改为 BACK 并再次运行代码。现在,您将得到以下输出 -
<前>270前>示例 2
您可以使用用户定义的函数 str_cmp() 获得类似的结果,如以下代码所示 -
<前>284前>当您运行此代码时,它将产生以下输出 -
<前>296前>str_cmp() 函数比较字符串中同一索引处的字符,直到任一字符串中的字符用完或字符相等。
当检测到同一索引处的不相等字符时,返回它们的 ASCII 值的差异。循环终止时返回“0”。
C语言