字符数组和字符指针变量都能实现字符串的存储和运算,但它们之间是有区别的,主要有以下几点:
1.字符数组由若干个元素组成,每个元素存放一个字符,而字符串指针变量中存放的是地址(字符串的首地址)。
例:
#include"stdio.h"
void main()
{
charstring1[] = "i am a student";
char*string2 = "i am a student";
printf("%s\n",string1);
printf("%s\n",string2);
}
输出结果如下:
i am a student
i am a student
2.赋值方式不同。对字符数组只能对各个元素赋值,不能用以下办法赋值。
char str[14];
str="i am a student";
而对字符指针变量,可以采用如下方式赋值。
char *string2;
string2= "i ama student";
3.数组可以在变量定义是整体赋值,但不能在赋值语句中整体赋值。
例:
char *string2 ="i am a student";
等价于
char *string2;
string2= "i ama student";
而对字符数组
charstring1[14] = "i am a student";(错误)
不能等价与
char string1[14];
string1[]="i am a student";(错误)
4.在定义一个数组时,在编译时已经分配内存单元,有确定的地址。而定义一个字符指针变量时,给指针变量分配内存单元,在其中可以存放一个地址值,该指针变量可以指向一个字符型数据,但未对它赋值,它则指向具体的字符数据。
5.指针变量的值是可以改变的
例:将字符串a复制到字符串b
#include"stdio.h"
void main()
{
chara[]="I am boy.",b[20];
inti;
for(i = 0; *(a + i) != '\0'; i++)
*(b+ i) = *(a + i);
*(b+ i) = '\0';
printf("stringa is:%s\n", a);
printf("stringb is:");
for(i = 0; i < 20; i++)
printf("%c",b[i]);
scanf("\n");
}
结果如下:
string a is:I amboy.
string b is:I amboy.