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存储类型变量,字符串常量。无法修改