字符串那些事1

字符串与字面串有什么区别?

——答:

    字符串:字符串在C语言中通常表示为字符数组,即一串字符的集合。字符串的结尾通常以空字符('\0')标识,用于标记字符串的结束。例如:

char str[] = "Hello, world!";

这是一个字符串,包含了一系列的字符和一个空字符作为结尾。

    字面串:字面串也称为字符串常量,它是在代码中直接写出的字符串。字面串在C语言中是作为字符数组处理的,并且在编译时会被分配存储空间。例如:

char *str = "Hello, world!";

这是一个字面串,它在代码中直接给出了一个字符串常量。这里使用了指针来存储字面串的地址。

它们的主要区别在于:

    字符串是字符数组,可以通过字符数组来操作;而字面串是常量,不可修改。
    字符串可以使用字符数组来定义和操作,而字面串则使用指针来指向其存储位置。
    字面串在编译时会被分配存储空间,而字符串则是在运行时动态分配的。

如何延续字面串?

——答:如果发现字面串太长了不能单独放置在一行内,那么只需要把第一行的结尾加上字符 \ 即可,这样C语言就允许在下一行延续字面串。例如:

printf("Do not go gentle into the good nignt,  \
old age should burn and rave at close of day.");

一般而言,通过行尾加字符\的方式可以把两行乃至更多行代码链接成一行,这个过程在C标准中称为“拼接”splicing.

但是使用 \ 有一个缺陷:那就是字面串必须从下一行起始位置继续,但这破坏了程序的缩进结构。不过还有更好的方法:当两条或更多字面串相邻时(仅用空格字符分开),编译器会把它们合并成一条字符串。因此可以怎么写:

printf("Do not go gentle into the good nignt,"
       "old age should burn and rave at close of day."
       "Rage, rage against the dying of light.");

printf函数调用与scanf函数调用中使用的字面串作为参数怎么进行传递的?

——答:为此我们需要了解字面串如何储存。

究极本质,C语言是将字面串作为字符数组来处理的。当C语言编译器在程序中遇到长度为n的字面串时,它会为其分配n+1长度的储存空间,其中n字符长度的空间用于储存字面串内容其末尾额外加上一个空字符'\0'

注意:空字符是一个所有位都位0的字节,因此用转义字符 \0表示,其码值位0,与零字符‘0’不同(零字符在ASCII中码值为48)。

因此既然字面串是作为数组来储存的,那么编译器会把它看作char *类型的指针。所以printf函数与scanf函数都接收char *类型的值作为它们的第一个参数。例如:

printf("abc")

当调用printf函数时,传递的是“abc”的地址即指向存储字母a的内存单元的指针。

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值