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