1:
字符数组是由若干个元素组成, 每个元素放一个字符,
字符指针变量中存放的是一个地址(字符串的第一个字符的地址), 绝不是将字符串放到字符指针变量中。
2:赋值方式:
对
字符数组只能对各元素赋值, 不能用以下办法对
字符数组赋值
char str[14];
str = "i love china";
对
字符指针变量, 可以采取下面的方法赋值
char *str;
str = "i love china";// 注意: 赋给str的不是字符, 而是字符串的第一个元
素的地址。
3:对
字符指针变量赋初值:
char*str = "i love china";
等价于 char*str;
str = "i love china";
对
字符数组初始化:
char str[14] = {"i love china"};
不等价于 char str[14];
str[] = "i love china";// 数组可以在定义的时候整体赋初值,
但不能在赋值语句中整体赋值。
4:定义
字符数组, 编译时为他分配内存单元,有确定的地址
定义
字符指针变量,给指针变量分配内存单元, 在其中可以放一个字符变量的地址
也就是说,该指针变量可以指向一个字符型数据, 但如果未对他赋予一个地址值,
则他并未具体指向一个确定的字符数据。
例如:
char str[10];
scanf("%s", str);
是可以的。而常有人用下面的方法:
char *str;
scanf("%s", str);
虽然有时能运行, 但这是危险的, 不提倡;
char*str, a[100];
str = a;
scanf("%s", str);// 先使str有确定值指向一个数组的首元素,然后输入一
个字符串, 把他存在从该地址开始的若干单元中;
5:
指针变量的值是可改变的
例如:
#include<stdio.h>
void main()
{
char *a = "i love china";
a = a +7; // 间接表示a[7]
printf("%s\n", a);// 从a[7]开始往后面输直到'\0';
printf("%c", a[4]); //a[4]是按*(a+4)处理, 即从a当前指的元素下移4个单
位输出其值;
}
运行结果:china
指针变量的值是可以变化的, 而数组名代表地址, 但它是常量, 不能改
变的
特殊:定义一个指针变量, 并使它指向一个字符串, 就可以下标形式引用
指针变量所指的字符串中的字符