目录
前言
七、指针
7.1~3 指针与变量、指针操作、指向指针的指针
7.4 指针与数组
7.5 指针与字符串
7.5.1 字符串与字符串数组
a. 字符串
b. 字符串数组
7.5.2 指针与字符串
a. 字符串指针的声明和初始化
b. 指针与字符串的遍历
c. 字符串的拷贝
d. 字符串的比较
7.5.3 反转字符串
前言
- 指针是一个变量,其存储的值是内存地址。通过指针,可以直接访问和操作内存中的数据。指针通常用于在程序中动态地分配内存、传递函数参数、实现数据结构等方面。
- 字符串是由字符组成的一串数据。在C语言中,字符串以null字符('\0')结尾,表示字符串的结束。字符串可以通过字符数组或指针来表示和操作。使用指针可以更灵活地处理字符串,因为指针可以指向字符串的起始位置,并通过指针运算来访问字符串中的字符。
- 使用指针来遍历字符串中的字符;
- 使用指针进行字符串的拷贝、连接和比较等操作;
- 指针还可以用于动态分配内存以存储字符串,这样可以根据需要调整字符串的长度。
七、指针
7.1~3 指针与变量、指针操作、指向指针的指针
【重拾C语言】七、指针(一)指针与变量、指针操作、指向指针的指针-CSDN博客https://blog.csdn.net/m0_63834988/article/details/133690334?spm=1001.2014.3001.5501https://blog.csdn.net/m0_63834988/article/details/133690334?spm=1001.2014.3001.5501
7.4 指针与数组
【重拾C语言】七、指针(二)指针与数组(用指针标识数组、多维数组与指针、数组指针与指针数组)-CSDN博客https://blog.csdn.net/m0_63834988/article/details/133753904?spm=1001.2014.3001.5501
7.5 指针与字符串
7.5.1 字符串与字符串数组
a. 字符串
C语言中没有特定的字符串类型,通常是将字符串放在一个字符数组中。字符串实际上是由一系列字符组成的,以空字符('\0'
)作为结束标志。可以通过声明字符数组来创建字符串,并使用数组中的元素来存储字符串的每个字符。
创建一个长度为20的字符数组 str
,并将字符串 "Hello, world!" 存储在数组中:
char str[20] = "Hello, world!";
(注意:需要确保数组的长度足够大,以容纳字符串及其结束标志)
- 字符串:
- 字符串常量
-
printf(“%d\n”,m); printf(“Hello world”);
-
- 字符串变量
-
char str[10]; strcpy(str,“hello”);
-
- 字符串常量
b. 字符串数组
使用字符数组的方式来声明和初始化一个字符串数组,其中每个元素都是一个字符串:
char strings[][20] = {
"Hello",
"World",
"C programming"
};
上述代码中,strings
是一个包含三个字符串的数组。每个字符串可以具有不同的长度(数组的每个元素都需要足够大,以容纳对应的字符串及其结束标志)。
注意:字符串数组中的每个字符串都以空字符结尾。在使用字符串数组时,需要注意字符串的结束位置。
7.5.2 指针与字符串
通过使用指针,可以更加灵活地操作和处理字符串。指针的优势在于可以直接访问字符串中的字符,而不需要通过数组索引来访问。
a. 字符串指针的声明和初始化
char *strPtr; // 声明一个字符指针
char *strPtr = "Hello"; // 初始化一个指向字符串常量的指针
可以声明一个字符指针 strPtr
,然后将其初始化为指向字符串常量 "Hello" 的起始位置。字符串常量是以字符数组的形式存储的,因此可以使用指针来访问其中的字符。
b. 指针与字符串的遍历
使用指针可以遍历字符串中的每个字符。
char *strPtr = "Hello";
while (*strPtr != '\0') {
printf("%c", *strPtr);
strPtr++; // 指针递增,指向下一个字符
}
在上述示例中,通过检查指针所指向的字符是否为结束标志 '\0'
,循环逐个打印字符串中的字符,并通过递增指针来访问下一个字符。
c. 字符串的拷贝
char source[] = "Hello";
char destination[10];
char *srcPtr = source;
char *destPtr = destination;
while (*srcPtr != '\0') {
*destPtr = *srcPtr;
srcPtr++;
destPtr++;
}
*destPtr = '\0'; // 在目标字符串末尾添加结束标志
通过逐个复制源字符串中的字符到目标字符串,并递增源指针和目标指针,最后在目标字符串末尾添加结束标志 '\0'
,完成字符串拷贝。
d. 字符串的比较
char *str1 = "Hello";
char *str2 = "Hello";
if (strcmp(str1, str2) == 0) {
printf("字符串相等\n");
} else {
printf("字符串不相等\n");
}
使用 strcmp
函数比较两个字符串是否相等,函数返回值为0表示字符串相等。
7.5.3 反转字符串
#include <stdio.h>
#include <string.h>
void reverseString(char* str) {
int length = strlen(str);
// 使用两个指针,一个指向字符串起始位置,一个指向字符串末尾
char* start = str;
char* end = str + length - 1;
// 交换指针所指向的字符,并向中间移动指针,直到两个指针相遇
while (start < end) {
char temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
}
int main() {
char str[] = "Hello, World!";
printf("原始字符串: %s\n", str);
reverseString(str);
printf("反转后的字符串: %s\n", str);
return 0;
}
reverseString
函数接受一个指向字符串的指针,并使用两个指针start
和end
分别指向字符串的起始位置和末尾位置。通过交换两个指针所指向的字符,并向中间移动指针,可以实现字符串的反转操作。- 在
main
函数中,声明一个字符串str
,并将其作为参数传递给reverseString
函数。然后打印出反转后的字符串。
关于指针作参数,详见后文:九、再论函数