C语言基础入门48篇_27_字符串string(非C基本数据类型,约定存储多个char数据的方式、定义字符串时编译器分配空间,复制字符,添加0结尾标志,返回首地址、字符数组可读可写,字符串可读不可写)

总结: String其实是使用的一个char类型的数组来存储字符串中的字符

1. 什么是字符串


C语言中的字符串不是一种基本类型,是一种约定

之前我们已经学过单个字符的文字型数据(char),在C语言中,字符串用双引号包围。

#include <stdio.h>

int main(int argc, char* argv[])
{
    printf("Hello");
    return 0;
}

字符串不是C语言中的基本数据类型。在我们之后的学习中可以看到,它是根据约定存储多个char数据的一种方式

2. C语言中的字符串


为了方便研究,我们将以上代码进行修改:

#include <stdio.h>

int main(int argc, char* argv[])
{
    char* szHello = "Hello"; //szHello存储的为地址
    printf("%s", szHello);
    return 0;
}

实际上,当我们定义"Hello"时,编译器帮助我们做了以下几件事情:

  • 根据"Hello"的字符串长度,分配一段char类型的空间,6个字节的空间
  • 将"Hello"中的字符一个一个复制到以上的空间中
  • 在以上空间的末尾添加数字0作为结束标志
  • 将字符串的首地址返回(char*类型)(空间中有6个字符,没有一个代表完整字符串,因此返回首地址,由于指向的数据类型为char类型)
#include <stdio.h>

int main(int argc, char* argv[])
{
    char* szHello = "Hello";
    printf("Hello字符串的空间大小: %d\r\n", sizeof("Hello"));
    printf("Hello字符串的首地址: %08X\r\n", szHello);
    return 0;
}

运行结果:"Hello"占用6个字节
在这里插入图片描述
在这里插入图片描述

我们甚至可以结合数组的知识,将字符串空间对应的char数据,一个个取出来,并输出:

#include <stdio.h>

int main(int argc, char* argv[])
{
    char* szHello = "Hello";
    int i = 0;
    for (; i < sizeof("Hello"); i++)
    {
        printf("%d: ASCII数值:%d, 对应字符:%c\r\n", 
            i, szHello[i], szHello[i]);
    }
    return 0;
}

在这里插入图片描述

注意:C语言中规定以数字0作为字符串的结尾

3. 字符数组与字符串的比较


因为字符串中的每一个元素都是char类型,所以与字符数组有相似的地方。比如:

#include <stdio.h>

int main(int argc, char* argv[])
{
    char* szHello = "Hello";
    char chAry[] = "Hello";

    printf("%s, %s\r\n", szHello, chAry);
    return 0;
}

运行结果:
在这里插入图片描述

但实际上是有区别的:

#include <stdio.h>

int main(int argc, char* argv[])
{
    char* szHello = "Hello";
    char chAry[] = "Hello";

    chAry[0] = 'j';
    printf("%s\r\n", chAry);

    szHello[0] = 'j';
    printf("%s\r\n", chAry);
    return 0;
}

运行结果:字符串不可写入
在这里插入图片描述
字符数组和字符串的区别简而言之:

  • 字符数组可读可写
  • 字符串可读不可写

4. 学习视频地址:字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十月旧城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值