- 赋值方式
可以对字符指针变量赋值,但不能对数组名赋值。 - 初始化
字符指针变量可以先定义,再初始化;而数组在定义后,只能对其元素一个一个赋值,要想整体赋值,必须在定义数组时就初始化。
char * a="qwert"; 等价于 char * a; a="qwert";
而
char a[]="qqqqq"; 等价于 char a[5]; for(int i=0;i<5;i++){ a[i]='q'; }
- 指针变量的值可以改变,而字符数组名代表一个固定的值(数组首元素地址)
- 字符数组中各元素值可以改变,但字符指针变量指向的字符串的内容是不可被改变的。
char a[]="qwert";
char * b="qwert";
a[2]='k'; //正确,k取代了e
b[2]='k'; //错误,字符串常量不能被改变
- 定义一个字符数组
char a[]="qwert";
,可以用*(a+2)引用元素a[2];如果此时定义了一个指针变量p,指向数组a,则可用p[2]表示a[2],若p此时指向a[1],则p[2]表示a[3]。如果定义了指针变量char * b="qwert";
,则b[2]就表示w,,b[2]按*(b+2)处理。 - 可变格式输出函数
用指针变量代替一个格式字符串
char * format; //也可定义为字符数组
format="a=%d,b=%f\n";
printf(format,a,b);
同printf("a=%d,b=%f\n",a,b);效果一样