基本C问题(初级)

时间:2011-08-08 11:33:01

标签: c

我刚刚开始学习C,经过一年的Java学习和写作。在涉及内存,变量和类似的东西时,我有很多事要做。我有几个问题,任何答案都会有所帮助:

  1. “char类型的值总是占用一个字节” - 这是否意味着char总是只有8位长?
  2. 现代计算机中使用了哪些字符集?不同操作系统之间有区别吗?
  3. 签名字符和未签名字符有什么区别?是角色 由数字机器代表?
  4. char * ch =“text”和char ch [] =“text”
  5. 之间有什么区别
  6. 使用无符号变量有什么好处?
  7. C定义标准类型的最小分类大小。谁定义了最大值,以及如何确定?
  8. 今天,当(例如)我们使用十六进制基数,还是二进制以外的任何其他基数?
  9. 内存对齐机器是否依赖?如果是,现代计算机中是否有任何常用方法?

3 个答案:

答案 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位。