C语言字符和字符串的存储

数值在计算机中是以二进制的形式存储的。

字符和字符串是先编码后再转化为二进制的形式存储,编码方式如(ASCII码,UTF8)。

例如,char x=‘a’,将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。

C中字符表示用单引号,字符串表示用双引号,字符串是一段连续的字符。

一、字符

字符之间的相减就是ASCII码之间的相减

在这里插入图片描述
在这里插入图片描述

字符整数在内存中的存储

在这里插入图片描述
在内存中只是存储了2和5的ASCII码的值
在这里插入图片描述
打印出a和b的值查表得知是2和5的ASCII码的值
为什么呢??

二、字符串

C语言中没有表示字符串类型的数据结构,但是C++用string表示字符串的数据类型。
想要表示字符串用指针或数组。

char *q="abcd";
char a[] = "hello";

这种定义是错误的,char类型只能表示字符。
在这里插入图片描述

指针表示字符串

在这里插入图片描述
p和q都是一个指针(在x86编译下一个指针4字节),指向了字符串的首地址
不管p,q字符串里有多个字符,指针p,q的大小依旧是4字节

字符串在内存的存储

在这里插入图片描述
在这里插入图片描述
上图的p-q只是两个指针里面存放的地址数之间的相减(即串abc的地址与串abcd的地址之间相差多少)

abcd存储时为什么是61 62 63 64(16进制显示)

存进去字符串abcd,刚好对应16进制的abcd
在这里插入图片描述

数组表示字符串

在这里插入图片描述
但还是计入串长,在数据结构中是不计入串长的
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值