亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

掌握 C 语言字符指针与函数用法

什么是 C 语言中的字符指针?

字符指针存储字符类型的地址,或字符数组(字符串)首字符的地址。在字符串操作中,字符指针非常实用。

C 语言没有专门的字符串数据类型。"char" 类型的数组被视为字符串,因此指向 char 类型数组的指针即代表一个字符串。该字符指针可作为参数传递给函数以处理字符串。

声明字符指针

字符指针指向字符或字符数组,声明语法如下:

 char *pointer_name; 

初始化字符指针

声明后,需用字符变量的地址初始化。若是字符数组,直接用数组名或首元素地址初始化即可。

指向单个字符

初始化指向字符类型的指针语法:

 char *pointer_name = &char_variable; 

指向字符数组(字符串)

初始化指向字符数组的指针语法:

 char *pointer_name = char_array; /*或*/ char *pointer_name = &char_array[0]; 

字符指针示例

下例声明一个字符变量和一个字符数组,用两个指针分别存储其地址,并通过指针打印值。

 #include <stdio.h> int main() { // 声明变量 char x = 'P'; char arr[] = "TutorialsPoint"; // 声明字符指针 char *ptr_x = &x; char *ptr_arr = arr; // 打印值 printf("Value of x : %c\n", *ptr_x); printf("Value of arr: %s\n", ptr_arr); return 0; } 

输出

运行代码,输出如下:

 Value of x : P Value of arr: TutorialsPoint 

深入理解字符指针

字符串可声明为数组:

 char arr[] = "Hello"; 

字符串是以空字符 \0 结尾的字符数组,上例数组最后一个元素即为 \0。

声明 char 类型指针,指向数组第 0 个元素地址:

 char *ptr = &arr[0]; 

数组名本身就是第 0 个元素的地址,故也可写作:

 char *ptr = arr; 

字符串也可直接用指针声明(无方括号):

 char *ptr = "Hello"; 

这会将字符串存入内存,并将其地址赋给 ptr。通过递增 ptr 可遍历字符串:

 while(*ptr != '\0'){ printf("%c", *ptr); ptr++; } 

访问字符数组

用 %s 格式符打印字符数组时,直接使用指针名即可;若需逐字符访问,需在指针名前加星号 * 并递增指针。

示例 1:逐字符打印

 #include <stdio.h> int main(){ char arr[] = "Character Pointers and Functions in C"; char *ptr = arr; while(*ptr != '\0'){ printf("%c", *ptr); ptr++; } } 

输出

 Character Pointers and Functions in C 

示例 2:直接打印字符串

 #include <stdio.h> int main(){ char arr[] = "Character Pointers and Functions in C"; char *ptr = arr; printf("%s", ptr); } 

输出

 Character Pointers and Functions in C 

字符指针相关函数

string.h 头文件定义了多个字符串处理库函数,如求长度、复制、比较等,这些函数均使用 char 指针作为参数。

strlen() 函数

strlen() 返回字符串长度(字符数)。原型:

 int strlen(char *) 

示例 1:打印字符串长度

 #include <stdio.h> #include <string.h> int main(){ char *ptr = "Hello"; printf("Given string: %s \n", ptr); printf("Length of the string: %d", strlen(ptr)); return 0; } 

输出:

 Given string: Hello Length of the string: 5 

示例 2:自定义实现字符串长度计算

 #include <stdio.h> #include <string.h> int str_len(char *); int main(){ char *ptr = "Welcome to Tutorialspoint"; int length = str_len(ptr); printf("Given string: %s \n", ptr); printf("Length of the string: %d", length); return 0; } int str_len(char *ptr){ int i = 0; while(*ptr != '\0'){ i++; ptr++; } return i; } 

输出:

 Given string: Welcome to Tutorialspoint Length of the string: 25 

strcpy() 函数

不能用赋值运算符 = 给字符指针赋字符串值,需用 strcpy(),原型:

 char * strcpy(char * dest, char * source); 

示例 1:使用 strcpy()

 #include <stdio.h> #include <string.h> int main(){ char *ptr = "How are you doing?"; char *ptr1; strcpy(ptr1, ptr); printf("%s", ptr1); return 0; } 

strcpy() 返回目标字符串指针 ptr1。

 How are you doing? 

示例 2:自定义实现字符串复制

 #include <stdio.h> #include <string.h> void str_cpy(char *d, char *s); int main(){ char *ptr = "Using the strcpy() Function"; char *ptr1; str_cpy(ptr1, ptr); printf("%s", ptr1); return 0; } void str_cpy(char *d, char *s){ int i; for(i = 0; s[i] != '\0'; i++) d[i] = s[i]; d[i] = '\0'; } 

输出:

 Using the strcpy() Function 

函数将源字符串逐字符复制到目标,直到遇到空字符 \0,最后在目标数组末尾添加 \0。

strcmp() 函数

不能用常规比较运算符(<, >, == 等)比较字符串,需用 string.h 中的 strcmp(),原型:

 int strcmp(char *str1, char *str2) 

strcmp() 有三种返回值:

示例 1:使用 strcmp()

 #include <stdio.h> #include <string.h> int main(){ char *s1 = "BASK"; char *s2 = "BALL"; int ret = strcmp(s1, s2); if (ret == 0) printf("Both strings are identical\n"); else if (ret > 0) printf("The first string appears after the second string \n"); else printf("The first string appears before the second string \n"); return 0; } 

输出:

 The first string appears after the second string 

将 s1 改为 "BACK" 再运行,输出:

 The first string appears before the second string 

示例 2:自定义实现字符串比较

 #include <stdio.h> #include <string.h> int str_cmp(char *str1, char *str2); int main(){ char *s1 = "The Best C Programming Tutorial Available Online"; char *s2 = "The Best C Programming Tutorial Available Online"; int ret = str_cmp(s1, s2); if (ret == 0) printf("Both strings are identical\n"); else if (ret > 0) printf("The first string appears after the second string\n"); else printf("The first string appears before the second string\n"); return 0; } int str_cmp(char *str1, char *str2) { while (*str1 != '\0' && *str2 != '\0') { if (*str1 != *str2) { return *str1 - *str2; } str1++; str2++; } // 两字符串相等返回 0 return 0; } 

输出:

 Both strings are identical 

str_cmp() 比较两字符串同一索引处的字符,直到任一字符串结束或字符相等。发现不等字符时返回其 ASCII 码差值;循环正常结束返回 0。

C语言

  1. C# 命名空间完全指南:避免命名冲突、using 指令与嵌套命名空间
  2. C++ 类模板实战指南:编写灵活的类型无关代码
  3. 掌握 C# while 与 do-while 循环:语法、示例与最佳实践
  4. C# 异常处理完全指南:try-catch-finally、异常类型、自定义异常与最佳实践
  5. C 语言自增自减运算符完全指南:用法、优先级与最佳实践
  6. 掌握 C++ break 语句:跳出循环与 switch 的核心控制流
  7. C++ 流精通:cout、cin、cerr、clog 实战指南
  8. C 语言 Typedef 详解:自定义类型名简化代码
  9. 掌握 C 语言结构体柔性数组成员实现动态数据处理
  10. 精通 C# ArrayList:动态数组全方位实战教程
  11. C# 数组完全指南:声明、初始化、访问与多维数组
  12. C++ char 类型完全指南:声明、ASCII 码、输入输出与字符串转换