|
虽然用字符数组和字符指针变量都能实现字符串的存储和运算,但它们二者是有区别的,不能混为一谈,主要有几点:
1、字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串的首地址),决不是将字符串放到字符指针变量中。
2、初始化方式:如char str[ ]={ "I love China! ");这是对数组中的每个元素做初始化。
char *a="I love China! ";并没有对数组初始化,只是对指针变量初始化。
3、赋值方式:对字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值。
char str[14];
str="I love China! ";
而对字符指针变量,可以采用下面方法赋值:
char *a;
a="I love China! ";
但注意赋给a的不是字符,而是字符串的首地址。
4、赋初值时,对以下的变量定义和赋初值:
char *a="I love China! ";
等价于:
char *a;
a="I love China! ";
而对数组初始化时:
static char str[14]={ "I love China! "};
不是等价于
char str[14];
str[ ]= "I love China! ";
即数组可以在变量定义时整体赋初值,但不能在赋值语句中整体赋值。
5、在定义一个数组时,在编译时即已分配内存单元,有确定的地址。而定义一个字符指针变量时,给指针变量分配内存单元,在其中可以放一个地址值,也就是说,该指针变量可以指向一个字符型数据,但如果未对它赋以一个地址位,则它并未具体指向哪一个字符数据。如:
char *a,str[10];
a=str;
scanf("%s",a);
先使a有确定值,也就是使a指向一个数组的开头,然后输入字符串到该地址开始的若干单元中。
6. 指针变量的值是可以改变的,如:
void main(void)
{char *a="I love China! ";
a=a+7;
printf("%s",a);
}
运行结果应该如下:
China!
指针变量a的值可以变化,输出字符串从a当时所指向的单元开始输出各个字符,直到遇’\0’为止。而数组名虽然代表地址,但它的值是不能改变的。下面是错的:
char str[ ]={ "I love China! "};
str=str+7;
printf("%s",str);
针对你这个问题可以修改成这样:
# include "stdio.h"
void main()
{
char[] b="test";
char *a=b; *a='c';
printf("%s",a);
}
先写这么多,不知道能理解不? |
|