(1)用字符指针指向一个字符串
示例:
#include <stdio.h>
int main()
{
char *string="I love China!";
printf("%s\n",string); //输出定义的字符串
}
(2)字符串中字符的存取方法
对字符串中字符的存取方法,可以有两种方法:下标方法和指针方法。
下标方法:将字符串str复制到字符串chr
#include <stdio.h>
int main()
{
char str[] = "She is a beautiful gril!",chr[40];
int i;
for(i=0;*(str+i)!='\0';i++)
{
*(chr+i) = *(str+i);
}
*(chr+i)='\0';
printf("String str is:%s\n",str);
//printf("String chr is:%s\n",chr);
printf("String chr is:");
for(i=0;chr[i]!='\0';i++)
{
printf("%c",chr[i]);
}
printf("\n");
return 0;
}
指针方法:将字符串str复制到字符串chr
#include <stdio.h>
int main()
{
char str[] = "She is a beautiful gril!",chr[40],*p1,*p2;
int i;
p1=str;
p2=chr;
for(;*p1!='\0';p1++,p2++)
{
*p2=*p1; //把p1的值依次赋值给p2
}
*p2='\0';
printf("String str is:%s\n",str);
printf("String str is:");
for(i=0;chr[i]!='\0';i++)
{
printf("%c",chr[i]);
}
printf("\n");
return 0;
}
此两种方法的输出结果都是:
(3)用函数调用实现字符串的复制
方法一:用字符数组作参数
#include <stdio.h>
int main()
{
void copy_string(char a[],char b[]);
char str[]="I am a teacher!";
char chr[]="You are a student!";
int i;
printf("String str is:%s\n",str);
printf("String chr is:%s\n",chr);
printf("\n");
printf("copy string chr to string str:\n");
copy_string(str,chr); //把str和chr这两个数组的第一个地址传递过去
printf("String str is:%s\n",str);
printf("String chr is:");
for(i=0;chr[i]!='\0';i++)
{
printf("%c",chr[i]);
}
printf("\n");
return 0;
}
void copy_string(char a[],char b[])
{
int i=0;
while(a[i]!='\0')
{
b[i]=a[i];
i++;
}
b[i]='\0';
}
方法二:用字符指针作参数
#include <stdio.h>
int main()
{
void copy_string(char *a,char *b);
char *str="I am a teacher!";
char chr[]="You are a student!";
printf("String str is:%s\nString chr is:%s\n",str,chr);
printf("copy string chr to string str:\n");
copy_string(str,chr);
printf("String str is:%s\nString chr is:%s\n",str,chr);
return 0;
}
void copy_string(char *a,char *b)
{
while(*a!='\0')
{
*b++=*a++;
}
*b='\0';
}
此两种方法的运行结果是:
(4)对使用字符指针变量和字符数组的讨论
虽然用字符数组和字符指针变量都能实现字符串的存储和运算,但是它们二者有差别的,不能混为一谈。
主要概况起来有以下几点:
1、字符数组由若干个原始组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串第一个字符的地址),绝不是将字符串放到字符指针变量中。
2、赋值方式。对字符数组只能对各个元素赋值。
不能用以下方法对字符数组赋值:
char str[20];
str = "I love China!";
而对字符指针变量,可以用下面的方法赋值:
char *a;
a = "I love China!";
但注意赋给a的不是字符,而是字符串第一个元素的地址。
3、对字符指针变量赋初值:
char *a = "I love China!";
等价于
char *a;
a = "I love China!";
而对数组的初始化:
char str[20] = {"I love China!"};
不能等价于
char str[20];
str[] = "I love China!";
4、指针变量的值是可以改变的
例如:
#include <stdio.h>
int main()
{
char *str="I love China!";
printf("%s\n",str);
str+=7;
printf("%s\n",str);
return 0;
}
运行结果:
另外需要说明的是,若定义了一个指针变量,并使它指向一个字符串,就可以用下标形式引用指针变量所指的字符串中的字符。
例如:
#include <stdio.h>
int main()
{
char *str="I love China!";
int i;
printf("The sixth character is %c\n",str[5]);
for(i=0;str[i]!='\0';i++)
{
printf("%c",str[i]);
}
printf("\n");
return 0;
}
执行结果是: