字符所占字节的大小

一、信息的单位

1、位(bit):是最小的数据度量单位

2、字节(Byte):是信息存储的基本单位。(1字节 = 8位 )

二、字符所占字节

1、以 ANSI 格式存储时:

(1)、一个英文字符(不区分大小写),占 1 个字节。

(2)、一个中文字符占 2 个字节。

2、以 UTF-8 格式存储时:

(1)、一个英文字符(不区分大小写),占 4 个字节。

(2)、一个中文字符占 6 个字节。

【注意】:以不同的方式存储时,所占的大小不同。

 

### C语言中单个字符用内存大小的计算 在C语言中,`sizeof` 是一种用于计算数据类型或变量所内存大小的操作符。对于单个字符而言,其用的内存大小可以通过 `sizeof(char)` 或者通过解引用一个字符类型的指针来获取。 #### 使用 `sizeof` 计算单个字符的内存大小 当定义一个字符型变量时,可以直接使用 `sizeof` 运算符对其进行操作。例如: ```c char c = 'A'; printf("%zu\n", sizeof(c)); // 输出 1 ``` 上述代码表明,单个字符在C语言中通常据 **1 字节** 的内存空间[^1]。 #### 解引用字符指针计算单个字符的内存大小 如果有一个指向字符的指针,则可以通过解引用该指针并应用 `sizeof` 来获得单个字符的内存大小。例如: ```c char* p = "abc"; printf("%zu\n", sizeof(*p)); // 输出 1 ``` 这里的 `*p` 表示指针 `p` 所指向的内容,即第一个字符 `'a'`,因此它的大小也是 **1 字节**[^3]。 需要注意的是,在这种情况下,`sizeof(p)` 返回的是指针本身的大小(通常是 4 或 8 字节,取决于平台架构),而不是其所指向的数据的实际大小。 --- ### 关于字符串的有效长度与总存储大小的区别 虽然 `sizeof` 可以用来测量整个数组或者对象的分配大小,但它无法直接反映字符串中实际有效的字符数量。这是因为 `sizeof` 不会考虑字符串终止符 `\0` 后面是否有额外的空间被分配给数组。为了统计字符串中的有效字符数目,应该使用标准库函数 `strlen()`,它会在遇到首个 `\0` 结束符之前逐一遍历字符串[^4]。 例如: ```c const char str[] = "hello"; printf("Size of array: %zu\n", sizeof(str)); // 输出 6 (包括 '\0') printf("Length of string: %zu\n", strlen(str)); // 输出 5 ``` 在这里可以看到,尽管 `"hello"` 中只有五个可见字符加上一个隐式的空终止符构成六个位置的整体结构体尺寸,但真正意义上的可读取部分仅限前五项。 --- ### 总结 无论是在单独声明的情况下还是作为更大复合实体的一部分存在时,每一个基本 ASCII 编码下的简单字符都会消耗固定的一单位八位组(bit/octet),也就是常说的一个字节(Byte)。这一定律适用于绝大多数现代计算机体系结构之上运行的标准实现版本之中[^2]。 ```c #include <stdio.h> int main() { char ch = 'Z'; printf("The size of a single character is: %zu bytes.\n", sizeof(ch)); return 0; } // The output will be: The size of a single character is: 1 bytes. ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值