c语言:字符串与字符串指针变量

时间:2023-01-11 17:26:25

字符数组和字符指针变量都能实现字符串的存储和运算,但它们之间是有区别的,主要有以下几点:

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.