虽然使用字符数组和字符指针变量都能实现字符串的存储和运算,但二者还是有区别的,不能混为一谈。
主要概括有以下几点:
1.字符数组由若干个元素构成,每个元素中存放一个字符,而指针变量存放的是字符串第一个字符的地址,而不是将字符串存放到指针变量中。
2.赋值方式。对字符数组只能对各个元素进行赋值,而不能采用一下办法进行赋值。
char str[20];
str ="hello world";
而对于字符指针变量,可以采用下面的方式
char *a;
a="hello world";
但是要注意赋值给a的不是字符,而是字符首元素的地址。
3.对字符指针变量赋初值:
char *a ="hello world";
等价于
char *a;
a = "hello world";
而对于数组的初始化 :
char str[20] = {"hello world"};
不能等价于
char str[20];
str[] ="hello world";
4.如果定义了一个字符数组,在编译时为他分配内存单元,他有确定的地址。而定义一个字符指针变量时,
给指针变量分配内存单元,在其中可以放一个字符变量的地址,也就是说指针变量可以指向一个字符型数
数据,但如果未为他赋予一个地址值,则他并未具体指向一个确定的字符数据。
举例: str[10];
scanf("%s",str); 这是完全可以的
虽然有人使用下面的方法,目的是想输入一个字符串,一般也能运行,但是这种方法是很危险的。
char *a;
scanf("%s",a); // 如果指针变量没有赋初值,他是随机指向的
5.指针变量的值是可以改变的
char *a ="hello world";
a +=4;
printf("%s",a);
这时候指针变量a指向原来的地址+4 ,所以打印的结果就是o world