码迷,mamicode.com
首页 > 编程语言 > 详细

字符串和字符数组

时间:2015-11-03 22:52:46      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:

 

1、字符串

严格意义上来说,C语言并没有字符串原生的字符串的类型,而是通过字符指针来实现的:char *p = "LINUX";。而对于其他的高级语言来说,比如C++的就存在字符串类型: string p1 = "I LOVE LINUX"; 。

    字符串在内存中其实就多个字节组成的,且地址都是连续的;指针指向字符串的的头部;字符串的结尾是以"\0"(是真能整的零)作为字符串结束的标志。

"\0" 的理解:

    \0 是一个 ASCII 字符,其实是编码为零的字符,是真正的零。这个和数字零是不同的,数字零的 ASCII 是48。

注意:

    当定义一个字符串的时候:char *p = "LINUX",系统会在这个字符串的结尾处自动添加‘\0‘,作为结束的标志,所以‘\0‘虽然是连接这最后一个字符,但是并不属于这个字符串。

    分配的字符串,是被保存到文字常量区

int main(int argc, char *argv[])
{
    char *p = "I LOVE LINUX";
    printf("%c\n", *p);
    printf("%s\n", p);
    while (1);
}

输出结果为:

II LOVE LINUX

 

2、字符数组

定义:char p[] = "I LOVE LINUX";

    其实就是将字符串放到数组中,在一块连续的内存中依次排放,则数组名则是指向字符串第一个地府的地址 。

int main(int argc, char *argv[])
{
    char p[] = "I LOVE LINUX";
    for (int i = 0; i < 12; i++)
    {
        printf("%c", *(p + i));
    }
    while (1);
}

   或者也可以直接printf("%s\n", p);,输出。

    字符数组是将整个字符串一次存在数组中,以上面为例,其实就是一个12个元素的数组。char p[12]={‘I‘,‘‘,‘L‘,‘O‘,‘V‘,‘E‘,‘‘,‘L‘,‘I‘,‘N‘,‘U‘,‘X‘},12 个元素依次排放。

注意: 因为是字符串,所以字符串结尾的地方编译器也是会自动添加 \‘0。分配的字符数组,是被分配到堆中。

3、sizeof、strlen与字符串、字符数组

 

sizeof:

    是 C 语言的运算符,计算变量的所占据的内存空间的大小。

strlen:

    是函数,计算字符串的长度。遇到‘\0‘就结束。

计算:

char str[20] = "0123456789";
int a = strlen(str); 
ubt b = sizeof(str);

a = 10,因为strlen() 是计算字符串的长度的函数,当遇到‘\0’就结束,所以得到的数值是10

b = 20 ,因为sizeof 函数是计算分配内存空间的大小的,很显然数组是分配了20个字节,所以得到的就是20了。

 

char *str1 = “abcde”;
char str2[] = "abcde";
char str3[8]={a,};
char str4[] = "0123456789";
sizeof(str1); // 4
sizeof(str2); // 6
sizeof(str3); // 8
sizeof(str4); // 11
 

    分析,首先可以知道sizeof 函数是计算分配内存空间大小的。str1 显然就是一个指针嘛,不论怎么样,只占所占的字节数,永远都是四个字节;str2 是字符数组,虽然字母是五个,但是必须知道字母的后面接有一个看不见的‘\0‘作为字符串的结束的标志,所以就总共了6个字符,所以就是6个字节了;str3 显然已经定义了数则的长度是8,所以只能是八个字节;str4 显然也是一个字符数则,十个字符加上一个‘\0‘字符串结束标志,总共11个字符,所以11个字节。

字符串和字符数组

标签:

原文地址:http://www.cnblogs.com/qxj511/p/4934512.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!