字符串的表现形式
2013-09-26 11:02 Keiven_LY 阅读(918) 评论(0) 编辑 收藏 举报参考博客:http://blog.163.com/ocean_china@126/blog/static/1851702020080410502075/)
字符数组
#include<stdio.h> #include<stdlib.h> int main() { static char string[]= "I Love China!"; printf("%s\n",string); system("pause"); return 0; }
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"); return 0; }
输出结果:
这里没有定义字符数组,但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的不是字符,而是字符串的首地址。