字符指针变量和字符数组在C语言的讨论
(2)赋值方式。对字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值;char str[14]; str=“I love China.”;
对字符指针变量,可以采用下面方法赋值:
char *a; a= “I love China.”; /*赋给a的是串的首地址*/
(3)对字符指针变量赋初值:
char *a=“I love China.”; 等价于 char *a; a=“I love China.”;
而对数组的初始化:
char str[14]={“I love China.”}; 不等价于 char str[14];
str[]=“I love China.”;
即数组可以在变量定义时整体赋初值,但不能在赋值语句中整体赋值。
(4)如果定义了一个字符数组,在编译时为它分配内存单元,它有确定的地址。 而定义一个字符指针变量时,给指针变量分配内存单元,在其中可以放一个地址值,也就是说,该指针变量可以指向一个字符型数据,但如果未对它赋一个地址值,则它并未具体指向一个确定的字符数据。这很危险。
如: char str[10]; scanf(“%s”,str); 是可以的
char *a;
scanf(“%s”,a); 能运行,但危险,不提倡,在a单元中是一个不可预料的值。应当 char *a,str[10]; a=str; scanf(“%s”,a);
(5)指针变量的值是可以改变的,数组名虽然代表地址,但它的值是不能改变的。可以下标形式引用所指的字符串中的字符。
如:main()
{char *a=“I love China.”;
a=a+7;
printf(“%s”,a); }
又如:char str[]={“I love China.”}; str=str+7; printf(“%s”,str); 是错的
(6)用指针变量指向一个格式字符串,可以用它代替printf函数中的格式字符串。也可以用字符数组实现,但由于不能采用赋值语句对数组整体赋值。
如:char *format; format=“a=%d,b=%f\n”; printf(format,a,b);
等价于:printf(“a=%d,b=%f\n”,a,b);
也可以:char format[ ]=“a=%d,b=%f\n”; printf(format,a,b);
点击加载更多评论>>