一、字符串与字符指针变量
1.直接记录代码
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system(“pause”) or input loop */
int main(int argc, char *argv[]) {
char *p = "hellow,world!"; //初始化字符指针变量,并指向字符串的首字母
//指针指向的是字符‘h’,指针加一就增加一字节大小, 就指向了e
//char *str = "hellow!";
while(*p != '\0'){
putchar(*p);
p++;
}
printf("\n");
printf("*************************\n");
printf("\"hellow\" + 0 = %c\n",*("hellow" + 0));
printf("\"hellow\" + 1 = %c\n",*("hellow" + 1));
printf("\"hellow\" + 2 = %c\n",*("hellow" + 2));
return 0;
}
2.注意点
字符串与字符数组名均表示指针常量(重点注意是常量),其本身的值不能修改,而定义的指针变量是一变量,可以直线不同的字符串。
如 c++; //错误。字符数组名c为常量
“hellow”++; //错误。字符串表示指针常量,其值不能修改
*(“hellow”+1)=‘d’; //运行时错误。试图把e,变为d
pc=“abcd”; //正确,让 pc 指向串 “abcd”
pc=“hello”; //正确,修改pc指向,让其指向串"hello"
*(pc+4) = ‘p’; //运行时错误。试图把’o’字符改变为’p’
strcpy(pc,“xyz”);//运行时错误。企图把另一个串复制到pc空间
二、字符数组与字符指针变量
1、字符数组可以理解成由若干个字符变量的集合,每个字符是变量,可以做修改。因此它与字符串有些区别
char str[]='I Like C Language!";
char *ps=str;//初始指向字符串首字符"I"
*(ps+3)=‘o’;//‘i’->‘o’
*(ps+4)=‘v’;//‘k’->‘v’
ps=str+2;//ps指向’L’字符
puts (ps);//输出 Love C Language!并换行
2.注意点
一般把字符串存放于字符数组中时,一定要存储字符串结束符 ‘\0’,因为 C 库函数中,对字符串处理的函数,几乎都是把 ‘\0’ 作为字符串结束标志的。如果字符数组中没有存储结束符,却使用了字符串处理函数,因为这些函数会寻找结束符 ‘\0’,、
字符数组定义时,一定要初始化,可以赋值0,如果没有初始化,到时直接操作赋值,容易崩溃