Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基本C问题(初学者)_C - Fatal编程技术网

基本C问题(初学者)

基本C问题(初学者),c,C,在用Java学习和编写了一年之后,我最近才开始学习C。当涉及到内存、变量和类似的东西时,我有很多事情要做。我有几个问题,任何答案都会很有帮助: “char类型的值总是占用一个字节”-这是否意味着char总是正好8位长 现代计算机使用什么字符集?不同的操作系统之间有区别吗 有符号字符和无符号字符之间有什么区别?角色是什么 由一个数字表示 char*ch=“text”和char ch[]=“text”之间有什么区别 使用无符号变量有什么好处 C定义标准类型的最小分拣大小。谁定义了最大值,如何确定 今

在用Java学习和编写了一年之后,我最近才开始学习C。当涉及到内存、变量和类似的东西时,我有很多事情要做。我有几个问题,任何答案都会很有帮助:

  • “char类型的值总是占用一个字节”-这是否意味着char总是正好8位长
  • 现代计算机使用什么字符集?不同的操作系统之间有区别吗
  • 有符号字符和无符号字符之间有什么区别?角色是什么 由一个数字表示
  • char*ch=“text”和char ch[]=“text”之间有什么区别
  • 使用无符号变量有什么好处
  • C定义标准类型的最小分拣大小。谁定义了最大值,如何确定
  • 今天,我们什么时候(例如)使用十六进制,或者除了二进制以外的任何其他进制
  • 内存对齐是否依赖于机器?如果是的话,现代计算机中有什么通用的方法吗
  • 1) 是,如果一个字节是8位
    2) 有ascii和unicode,开发人员可以选择(因为有些函数接受unicode参数,有些函数需要ascii),但c的字符是ascii(z)
    3) 有符号字符=从-127到+128,无符号字符=从0到255。否、ascii或unicode
    4) 第一个是指针(字符串存储在堆上),第二个是数组(字符串存储在堆栈上)
    5) 不知道
    6) 我想是编译器相关的
    7) 你选择。所代表的数字是相同的。如果您觉得使用八进制比使用十进制更舒服,那么就没有问题了
    8) 对。它取决于该机器的字大小,通常为32或64位

    “char类型的值总是占用一个字节”-这是否意味着 字符的长度总是正好是8位

    不,这意味着对于C语言,一个字节并不总是8位长。在
    stdint.h
    中有一个宏
    CHAR\u BIT
    ,用于查询一个字节中有多少位<代码>字符位至少为8

    “现代计算机中使用的字符集是什么?是否存在 不同操作系统之间的差异?”

    与C语言无关。C及其标准库都没有字符集的概念

    “有符号字符和无符号字符之间有什么区别? 由数字机器表示的字符是否依赖?”

    一个有签名,另一个没有签名。请注意,
    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语言除了正确对齐自动变量和结构成员外,对对齐没有任何保证。

    • 不可以。(C上下文中字节的定义是数据存储的可寻址单元,大到足以容纳执行环境的基本字符集的任何成员,它至少必须是8位,我使用过9位字节的C实现,并且知道一些有16位(DSP)或64位字节(Cray)的实现)

    • Windows以外的操作系统对于字符集往往相对中立。有一种趋势是使用Unicode,但欧洲的ISO-8851-X和亚洲的各种宽字符集仍然有其追随者

    • 它取决于语言环境

    • 首先定义一个指向字符的指针,用指向字符串“text”的指针初始化,然后定义一个由5个字符组成的数组,用“text\0”初始化

    • 没有上限。实现使用它认为有用的东西。通常情况下,遵循操作系统确定的ABI(某些操作系统具有多个ABI,这些ABI可以具有不同大小的类型)

    • 方便人类

    • 作为基本类型的较宽构件的尺寸


    恐怕这不是一个很有用的问题。关于SO的问题应该是具体的和编程相关的,而不是一般的“教我如何X”要求。我建议你a)多学一点C),b)将你的问题分成不同的帖子,C)只发布与特定编程问题相关且可以回答的问题。@Kerrek:这个问题可能有缺点,但肯定不是“教我如何X”类型。@Armen:“X的好处是什么”与“教我如何做正确的X”,非?问题(2)没有任何意义,它完全缺乏范围或背景。我不明白你如何能有意义和有用地回答这个问题。这看起来像是一个作业(或一张试卷)。它的长度正好是
    CHAR\u BIT
    位。而且
    CHAR\u BIT
    至少是8