我刚刚开始学习C,经过一年的Java学习和写作。在涉及内存,变量和类似的东西时,我有很多事要做。我有几个问题,任何答案都会有所帮助:
答案 0 :(得分:1)
“char类型的值总是占用一个字节” - 这是否意味着 char总是长8位?
不,这意味着对于C语言,一个字节并不总是8位长。 CHAR_BIT
中有一个宏stdint.h
来查询一个字节中有多少位。 CHAR_BIT
至少为8。
“现代计算机中使用了哪些字符集?是否有 不同操作系统之间的区别?“
与C语言无关。 C及其标准库都没有字符集的概念。
好吧,一个是签名,另一个是未签名的。请注意“签名的char和unsigned char之间有什么区别? 由数字机器代表的角色是否依赖?“
char
已签名或未签名,具体取决于您的平台。所以char
实际上有三种变体。 C语言没有定义字符对应的数字。
“char * ch =”text“和char ch [] =之间有什么区别 “文本”,“
当您尝试修改它时,第一个将触发未定义的行为(并且应该是const char *ch = "text"
),第二个不会。实际上,第一个构造创建一个常量字符串(通常进入.data部分)并为您提供指向它的指针。第二个构造定义了一个5字符长的数组,并用't''e''x''t''\ 0'填充它。
“使用无符号变量有什么好处?”
无符号变量的算法保证是模2 ^ n算术。对签名类型的要求较少(例如,有符号溢出具有未定义的行为)
“C定义标准类型的最小分类大小。谁定义 最大值,以及如何确定?“
没有人。如果您需要实现的最大值,stdint.h
中有便利宏。
“今天,当(例如)我们使用十六进制基数或其他任何基数时 除了二进制以外的基础吗?“
与C语言无关
“内存对齐机器是否依赖?如果是,是否有任何共同点 现代计算机中的方法?“
是的,它取决于机器,这与您的编程无关。除了正确对齐自动变量和结构成员外,C语言不保证对齐。
答案 1 :(得分:1)
没有。 (C语境中 byte 的定义是数据存储的可寻址单元,足以容纳执行环境的基本字符集的任何成员,它只需要至少为8位,我使用了9位字节的C实现,并且知道有一些具有16位DSP或64位字节的内容--Cray)
Windows以外的操作系统对于charset往往相对中立。有一种趋势是转向Unicode,但欧洲的ISO-8851-X和亚洲各种广泛的字符集仍然有他们的追随者。
依赖于语言环境。
首先将一个pointeur定义为使用指向字符串“text”的pointeur初始化的char,第二个定义使用“text \ 0”初始化的5个字符的数组
没有最大值。实现使用它认为有用的东西。通常是通过尊重OS确定的ABI(某些操作系统有几个ABI可以有不同大小的类型)。
方便人类。
基本类型的较宽成员的大小。
答案 2 :(得分:0)
1)是,如果一个字节是8位
2)有ascii和unicode,作为开发人员你可以选择(因为有些函数接受unicode params而有些函数需要ascii)但是c的字符是ascii(z)
3)签名char =从-127到+128,unsigned char =从0到255.否,ascii或unicode
4)第一个是指针(并且字符串存储在堆上),第二个是数组(并且字符串存储在堆栈中)
5)不知道
6)编译器依赖我猜
7)你选择。代表的数字是相同的。如果你觉得使用八进制基数比十进制更舒服那就没有问题了
8)是的。它取决于该机器的字大小,通常为32或64位。