区别:1、字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串第一个字符的地址)。
2、赋值方式。对字符数组只能对各个元素赋值,不能用以下方法对字符数组赋值:char str[20]; str="I love China";而对字符指针变量,可以用如下方法赋值:char *a; a="I love China ";注意,赋值给a的不是字符,而是字符串的第一个元素的地址。
3、对字符指针变量赋初值:char *a="I love China";等价于char*a; a="I love China";而对数组的初始化:char a[20]={"I love China"};不能等价于:char str[20];str[]="I love China";
4、如果定义了一个字符数组,在编译时为它们分配内存单元,它有确定的地址。而定义一个字符指针变量时,给指针变量分配内存单元,在其中可放一个字符指针变量的地址。也就是说,该指针变量可以指向一个字符型数据,但若未对它赋予一个地址值,则它未具体指向一个确定的字符数据。例:char str[10]; sanf("%s",str); 合法。但:char *a; scanf("%s",a); 有时也可执行,但风险较大。
5、指针变量的值是可以改变的,例:
#include <stdafx.h> #include<stdio.h> void main() { char *a="Hello word"; a+=4; printf("%s ",a); }
注:指针变量的值(即地址)可以改变,但指针指向的值无法改变。
6、若定义了一个指针变量,并使它指向一个字符串,就可以用下标形式引用指针变量所指的字符串中的字符。
例:
1 #include <stdafx.h> 2 #include<stdio.h> 3 4 void main() 5 { 6 char *a="Hello word"; 7 int i=0; 8 for(;a[i]!='