从头开始学C语言第二十八天——字符指针和字符串
C语言通过字符数组处理字符串。通常把char类型的指针变量称为字符指针,字符指针也被用来处理字符串。
初始化字符指针就是把字符串的首地址赋予指针,不是把字符串复制到字符指针。
char a[] = "hello world";
char *pa = a;
*pa指向的不是字符'h',而是字符所在内存的位置。
#include <stdio.h>
#include <ctype.h>
int main()
{
char a[]="hello world";
char b[]="apple";
char *pa = a;
if(isalpha(*pa))
{
if(islower(*pa))
{
*pa = toupper(*pa);
}
else
{
*pa = tolower(*pa);
}
}
printf("%s %p \n",a,a);
printf("%s %p \n",pa,&pa);
pa = b;
printf("%p \n",b);
printf("%p \n",pa);
//改变指针所指对象之后,指针所指的对象的地址也会随之改变
//pa开始指向的是a数组的首地址,后面变成指向b数组的首地址
return 0;
}
从程序我们可以看到, *pa指向a数组时,我们可以改变a数组的内容。
在C语言中,当一个字符指针指向一个字符串常量,不能修改指针指向对象的值。
#include <stdio.h>
#include <ctype.h>
int main()
{
char *p1 = "hello world";
char *p2 = "hello world";
//指针保存在栈区
//字符串"hello world"保存在静态存储区,无法修改
//p1[0] = 'a';//系统不会报错,但是运行时系统会崩溃
printf("%s\n%p\n%p\n",p1,p1,&p1);
printf("%s\n%p\n%p\n",p2,p2,&p2);
return 0;
}
存放在静态存储区的变量有:全局变量,static存储类型变量,字符串常量。无法修改