代码改变世界

字符串的表现形式

2013-09-26 11:02  Keiven_LY  阅读(911)  评论(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,则系统先输出它所指向的一个字符数据,然后自动使string1,使之指向下一个字符,然后再输出一个字符,……,如此直到遇到字符串结束标志‘\0为止(‘\0’ASCII码为0ASCII码为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的不是字符,而是字符串的首地址