字符指针变量是指向字符型数据的指针,也可以说是指向字符串的指针。在C语言中,由于字符串以空字符'\0'结尾,因此字符串通常被视为字符数组,因而可以使用指向字符的指针来对字符串进行操作。
下面是一个简单的示例,演示了字符指针变量的使用:
#include<stdio.h>
//字符指针的使用
int main()
{
char str[] = "Hello World!";//定义一个字符串数组
char* ptr = str;//定义一个指针变量,指向字符串数组的首字符
while (*ptr != '\0')//在遇到空字符前,循环下面的操作
{
printf("%c", *ptr);//打印指针内容
ptr++;//指针后移,指向下一个字符
}
return 0;
}
在这个示例中,str
是一个字符串数组,存储了 "Hello, World!" 这个字符串。然后,我们定义了一个字符指针变量 ptr
,将其指向 str
字符串的首字符。接着,使用 while
循环遍历指针 ptr
所指向的字符,直到遇到字符串的结束符号 '\0'。
我们再来看一个《剑指offer》中收录的一道和字符串相关的笔试题
char str1[] = "Hello world!";
char str2[] = "Hello world!";
const char* ptr1 = "Hello world!";
const char* ptr2 = "Hello world!";
if (str1 == str2)
{
printf("str1 and str2 are same!\n");
}
else
{
printf("str1 and str2 are not same!\n");
}
if (ptr1 == ptr2)
{
printf("ptr1 and ptr2 are same!\n");
}
else
{
printf("ptr1 and ptr2 are not same!\n");
}
上面这段代码执行的结果是:
str1 and str2 are not same!
ptr1 and ptr2 are same!
这是因为ptr1和ptr2指向的是同一个字符串常量,在C语言中会把字符串常量单独放到一块内存区域,当几个指针指向同一个字符串常量时 ,它们指向的实际是同一块内存。但是,用相同的字符串常量去初始化不同的数组时,会存放到不同的内存区域。
更多C语言相关练习请访问:test_c: C语言练习,包括常见语法练习以及小项目练习。 (gitee.com)