字符串的表现形式
字符数组
#include<stdio.h>
#include<stdlib.h>
int main()
{
static char string[]= "I Love China!";
printf("%s\n",string);
system("pause");
return0;
}
string是字符数组,代表的是字符数组的⾸地址,string[4]代表数组中序号为4的元素(v),实际上string[4]就是*(string+4),string+4是指向字符“v”的指针
字符指针
#include<stdio.h>
#include<stdlib.h>
int main()
{
char *string = "I Love China!";
printf("%s\n",string);
system("pause");
return0;
}
输出结果:
这⾥没有定义字符数组,但C语⾔对字符串常量是按字符数组处理的,实际上在内存中开辟了⼀个字符数组⽤来存放字符串数组。
在程序中定义了⼀个字符指针变量string。并把字符串⾸地址(即存放字符串的字符数组的⾸地址)赋给它。
程序中语句:char *string = "I Love China!";等价于下⾯两⾏:
char *string;
string = "I Love China!";
可以看到:string被定义为⼀个指针变量,它指向字符型数据,且只能指向⼀个字符变量或其它字符类型数据,不能同时指向多个字符数据,更不是把"I Love China!"这些字符存放到string中。只是把"I Love China!"的⾸地址赋给指针变量string(不是把字符串赋给*string)。因此不要认为上述定义⾏等价于:
char *string;
*string = "I Love China!";
字符串常量可以存放在字符串变量中
语句printf("%s\n",string);%s表⽰输出⼀个字符串,给出字符指针变量名string,则系统先输出它所指向的⼀个字符数据,然后⾃
动使string加1,使之指向下⼀个字符,然后再输出⼀个字符,……,如此直到遇到字符串结束标志‘\0’为⽌(‘\0’的ASCII码为0,ASCII码
为0的字符是“空操作字符”,即它不引起任何控制操作,也不是⼀个可显⽰的字符)。注意,内存中,字符串的最后被⾃动加了⼀个‘\0’,因此在输出时能确定字符串的终⽌位置。
注意以下⼏点:
(1)字符数组由若⼲个元素组成,每个元素中放⼀个字符,⽽字符指针变量中存放的是地址(字符串的⾸地址),决不是将字符串放到字符指针变量中。
(2)赋初值的⽅式。
对数组赋初值要⽤static存储类别,如  static str[ ]={ "I love China! ");
⽽对字符指针变量不必加static存储类型,如  char *a = "I love China! ";
这是因为并没有对数组初始化,只是对指针变量初始化。
(3)赋值⽅式。
对字符数组只能对各个元素赋值,不能⽤以下办法对字符数组赋值。
char str[14];
str = "I love China! ";//错误
⽽对字符指针变量,可以采⽤下⾯⽅法赋值:char *a;
a = "I love China! ";
但注意赋给a的不是字符,⽽是字符串的⾸地址。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。