C语言 看图说话-字符串原理

文章详细阐述了字符(char)在内存中的表示,以及字符数组与字符串的差异。字符数组不包含结束标记,而字符串以结束。字符串常量在常量区存储,局部变量如str1[]在栈区创建并复制。指针p1、p2可指向常量区的字符串,但不能修改其内容,而str1作为数组名虽不可直接赋值,但其成员值可变。
摘要由CSDN通过智能技术生成

   首先来看字符,字符用char来表示,他代表1个字节的字符,只能表示ASCII码值,不能表示汉字字符,他的赋值方式可以是影像赋值,也可以是十进制、八进制或是十六进制的形式。它存储的是字符的编码,并以影像的方式呈现出来。

  那么字符数组和字符串有什么区别呢?首先他们都是表示若干个字符的组合,但是字符串要有字符的结束标记'\0',有了'\0'的字符数组才能叫作字符串,但是我们手动来赋'\0'太过于麻烦,所以我们在定义字符串时通常用" "来初始化,因为他会在字符串的结尾自动赋上'\0'(注意'\0'也会占一个字符空间),那么在初始化后我们将这个字符数组称之为字符串,将" "中的内容称之为字符串常量。只要是常量,就会放在常数区。在代码中,字符串常量可以理解为一个地址,就是字符串所在常量区的首地址。

  由于str1[]是局部变量,所以会在栈区被创建,在初始化时,后面的字符串会被在常数区先创建出来,而后在栈区对其进行复制。p1和p2也在栈区被创建,由于Hello\0之前已经在常数区被创建出来了,所以p1、p2可以直接来指向Hello\0。

  在这里面,我们尤其要搞懂哪些值是常量,先来看左下角这几个bug出在哪里。由于p1和p2是指向常数区的地址,所以用指针当作数组名不可以对他的成员进行更改,只可以改变指针的指向,这里就像const *p一样,指针的指向可改而指向的内容不可以改。下面这个错误是因为str1是数组名,而我们知道数组名是地址常量,并且右面的内容是字符串常量,将一个常量赋给另一个常量,会出现左值不可更改的错误。但是由于str1创建的字符串是在栈区内,所以它的成员的值是可以被修改的。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员懒羊羊

多多支持

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

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

打赏作者

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

抵扣说明:

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

余额充值